﻿   // JScript File

        var g_SiteID;
        // the handler file which returns xml to this control
        var g_HandlerURL = "../Resources/DAMCategories.ashx";
        
        // the image for the asset and folder icons
        var g_AssetURL = "../../img/TreeView/asset.png";
        var g_FolderURL = "../../img/TreeView/folder.gif";
        
            
        function CreateHelper()
        {
          $("<div class='assetsToMove' id='assetsToMove'><label id='lblMoveCount'>0</label> selected</div>").prependTo($("#helper"));
        }
        
        function Initialize()
        {
            var status = $("#divStatus");
            status.dialog({ modal: true, 
            buttons: { 
                        "Ok": function() 
                            { 
                                $(this).dialog("close");
                            }
                      }
                });
            status.dialog('close');
            $("#assetTable").css("display","none");
            CreateHelper();
            var assetTable = $("#assetTable");
            
            TreeView1.add_nodeSelect(TreeView1_onNodeSelect);
            TreeView1.add_contextMenu(TreeView1_onContextMenu);
            TreeView1.add_nodeCheckChange(TreeView1_onNodeCheckChange);
            TreeView1.add_nodeExpand(TreeView1_onNodeExpand);
            TreeView1.add_nodeMove(TreeView1_onNodeMove);
            TreeView1.add_nodeBeforeMove(TreeView1_onBeforeNodeMove);
            
            
            
            CallBack1.callback(1); 
            
        }
        
        function SelectCheckBox(checkBoxName)
        {
            // when a user clicks on a single item we want to enable dragging and dropping
            
            var checkBox = $("#" + checkBoxName);
            moveCount = $("#ctl00_ContentPlaceHolder1_grdAssetManagement TBODY input:checked").length;

            if (moveCount > 0)
            {
                DraggingAndDropping(true);
            }else{
            }    
           
            SetMoveCount();
        }
        
        function SetMoveCount()
        {
            var lblMoveCount = $("#lblMoveCount");
            lblMoveCount.text($("#ctl00_ContentPlaceHolder1_grdAssetManagement TBODY input:checked").length);
        }
        
        function DraggingAndDropping(enabled)
        {

            var assetTable = $("#ctl00_ContentPlaceHolder1_grdAssetManagement tr td");
            var treeNodes = $(".TreeNode");
            
            if (enabled)
            {
                assetTable.draggable({ revert: 'invalid', helper: AssetsToMove,
                    start : function() {SetMoveCount();},
                    stop : function(event,ui){ CreateHelper();}});
                    
                MakeDroppable("TreeNode");     
            }
        }


        function MakeDroppable(TreeName)
        {
                treeNodes = $("."+ TreeName);
                treeNodes.droppable(
                {   
                    hoverClass: 'hoverClass', greedy : true, tolerance : 'intersect', 
                    drop: function(event, ui) 
                    {  
                        var uiDraggable = ui.draggable;
                        var assetsToMove = "";
                        $("#ctl00_ContentPlaceHolder1_grdAssetManagement TBODY input:checked").each(
                        function(i) 
                        { 
                            assetsToMove += $(this).attr("id") + ",";
                        });
                        
                        var nodeName = $(this).attr("id");
                        var offset = $(this).offset();
                        
                        //TODO : CHECK THIS LOGIC

                        var treeViewNode = TreeView1.getNodeAt(offset.left, offset.top);
                        TreeView1_MoveAssets(treeViewNode, assetsToMove);
                        treeNodes.droppable('destroy');
                    }
                });
        }
          
        function SelectAllCheckBoxes(obj, elementName)
        {
            // selects all checkboxes, when user clicks the top check boxes
            
            var lblMoveCount = $("#lblMoveCount");
            lblMoveCount.text("0");
            
            var status = $("#divStatus");
            status.text("");

            if (obj.checked)
            {
                // master was checked enable drag and drop
                DraggingAndDropping(true);
            }else{
                DraggingAndDropping(false);
            }
            
            // loop through all the checkboxes and either select them or deselect them, depending on the master checkbox
            var AllAssetsCheckBoxes = $("#" + elementName + " input:checkbox");
            AllAssetsCheckBoxes.each(function(i)
            {
                if ($(this).attr("id").length > 0)
                {
                    // master was checked
                    if (obj.checked)
                    {
                        $(this).attr("checked","checked");   
                    }else{
                        // uncheck the box
                        $("#" + elementName + " input:checkbox").removeAttr("checked");
                    }
            
                }
            });
            // exclude the top master checkbox in the count
            SetMoveCount();
        }

        
        function AssetsToMove()
        {
            var assetsToMove = $(".assetsToMove");
            assetsToMove.css({'display' : 'block', 'z-index' : '55'});//, 'left': offset.left, 'top' : offset.top, });
            return assetsToMove;
        }
        var lastSelectEventArgs;
        var lastSelectSender;
        // Handles the TreeView node select event
        function TreeView1_onNodeSelect(sender, eventArgs)
        {
            lastSelectSender = sender;
            lastSelectEventArgs = eventArgs;
            var node = eventArgs.get_node();
            DraggingAndDropping(false);
            node.set_contentCallbackUrl(g_HandlerURL + "?function=GetNodes&siteID=" + g_SiteID + "&nodeID=" + node.get_id());
            
            //Removed the Dialog Box
//            var status = $("#divStatus");
//            status.text('Getting assets for ' + node.get_text());
//            status.dialog('option' , 'title' , 'Getting Assets' );
//            
//            
//            status.dialog('open');
//            setTimeout(status.dialog('close'),10000);
            
            $("#assetTable").css("display","none");
            
            //Edit By Nishan
            //TreeView1_GetAssets(node.get_id());            
            
            //New Ajax callback to the page method
            CallBack1.callback(eventArgs.get_node().get_id()); 
        }
        
        function TreeView1_onPropertyChanged(sender, eventArgs)
        {
        }
        
        function TreeView1_onNodeExpand(sender, eventArgs)
        {
            var node = eventArgs.get_node();
            $("#assetTable").css("display","none");
            
            var childNodes = node.Nodes();
        
            for(var i = 0; i < childNodes.length; i++)
            {
                var currentNode = childNodes[i];
                
                currentNode.set_imageUrl(g_FolderURL); 
                
                currentNode.set_contentCallbackUrl(g_HandlerURL + "?function=GetNodes&siteID=" + g_SiteID + "&nodeID=" + currentNode.get_id());
                currentNode.set_draggingEnabled(true);
                currentNode.set_droppingEnabled(true); 
            }  
        }
      
        function TreeView1_MoveAssets(tvwNode, assets) 
        {
            var status = $("#divStatus");

            status.dialog('open');
            status.dialog('option' , 'title' , 'Moving Assets' );
            
            $.ajax({
            type: "GET",
            url: g_HandlerURL,
            data: "function=MoveAssets&siteID=" + g_SiteID + "&nodeID=" + tvwNode.get_id() + "&nodesToMove=" + assets,
            dataType: "xml",
            success: function(data) 
            {   
                status.text('Moving ' + assets + " to " + tvwNode.get_text());
                status.dialog('open');
                
                var name_text = $(data).find('nodes').text()
                if (name_text.toString().toLowerCase() == "true")
                {
                   status.html("Your assets were successfully moved to <strong>" + tvwNode.get_text() + "</strong>");
                   $("#assetTable").css("display","none");
                }else{
                  status.text("There was a problem moving these assets");
                }
            },
            error:function (xhr, ajaxOptions, thrownError){
                    alert(xhr.status);
                    alert(thrownError);
            }  
           });
        }
          
        function TreeView1_GetAssets(nodeid) 
        {
            var status = $("#divStatus");
           
            $("#assetTable input:checkbox").removeAttr("checked");
            $("#assetTable").css("display","none");
            
            $.ajax({
            type: "GET",
            url: g_HandlerURL,
            data: "function=GetAssets&siteID=" + g_SiteID + "&nodeID=" + nodeid,
            dataType: "xml",
            success: function(data) 
            {   
                setTimeout(status.dialog('close'),5000);
                //status.dialog('close');
                var assetTable = $("#assetTable TBODY");
                assetTable.empty();
                status.dialog('option' , 'title' , 'Category Assets' );
                
                
                if ($("AssetData", data).length > 0)
                {
                    $("#assetTable").css("display","block");
                    
                    $("AssetData", data).each(function(i) 
                    {
                        var node = $(this);
                        
                        nodeID = node.attr("ID");
                        nodeText = node.attr("Text");
                        nodeCurrentVersionNo = node.attr("CurrentVersionNo");
                        nodeAssetDetail = node.attr("AssetDetail");
                        
                        if (nodeID > 0)
                        {
                            //build the asset table
                            
                            var newAsset = "";
                            newAsset += "<tr id='" + nodeID + "'>";
                            newAsset += "<td class='id'><input type='checkbox' id='" + nodeID + "' onclick=SelectCheckBox('asset_" + nodeID + "') value='" + nodeID + "' /></td>";
                            newAsset += "<td class='text'><label>" + nodeText + "</label></td>";
                            newAsset += "<td class='detail'>" + nodeAssetDetail + "</td>"
                            newAsset += "<td class='version'>" + nodeCurrentVersionNo + "</td>";
                            newAsset += "</tr>"; 
                            
                            $(newAsset).prependTo(assetTable);
                              
                        }
                    });
                }else{
                   status.text("This category does not contain any assets");
                }
            },
            error:function (xhr, ajaxOptions, thrownError){
                    alert(xhr.status);
                    alert(thrownError);
            }  
           });
        }
        
        function TreeView1_onBeforeNodeMove(sender, eventArgs) 
        {
            $("#assetTable").css("display","none");
            
            // check whether this node has any sub-categories / assets
            movedNode = eventArgs.get_node();
            newParent = eventArgs.get_newParentNode();
           
            var status = $("#divStatus");
            status.dialog('open');
            status.dialog('option' , 'title' , 'Moving Node' );
            
            //stop node from moving until we know its ok
            eventArgs.set_cancel(true);    
            
            $.ajax({
            type: "GET",
            url: g_HandlerURL,
            data: "function=MoveNode&siteID=" + g_SiteID + "&nodeID=" + movedNode.get_id() + "&newParentID=" + newParent.get_id(),
            dataType: "xml",
            success: function(data) 
            {   var name_text = $(data).find('nodes').text()
                if (name_text.toString().toLowerCase() == "true")
                { 
                    // its ok , lets move the node
                    status.text("Moving " + movedNode.get_id() + "  " + name_text.toString().toLowerCase());
                    TreeView1_onNodeMove(sender, eventArgs);
                }else{
                   status.text("There was a problem moving " + nodeID + "  " + name_text.toString().toLowerCase());
                   status.dialog('open');  
                }
            },
            error:function (xhr, ajaxOptions, thrownError){
                    alert(xhr.status);
                    alert(thrownError);
            }  
           });
        }

        function TreeView1_onNodeMove(sender, eventArgs)
        {
            // on successfully moving the node, we want to create a new node, 
            // set its properties and then remove the old one from the treeview
            
            var status = $("#divStatus");
            status.dialog('open');
            status.dialog('option' , 'title' , 'Category Moved' );
            
            currentNode = eventArgs.get_node();
            
            newParent = eventArgs.get_newParentNode();
            
            // set the properties and expand the parent to show the new node
            var newTreeViewNode = new ComponentArt.Web.UI.TreeViewNode();

            newTreeViewNode.set_id(currentNode.get_id());
            newTreeViewNode.set_text(currentNode.get_text());
            currentNode.remove();
            
            newTreeViewNode.set_imageUrl(g_FolderURL); 
            newTreeViewNode.set_draggingEnabled(true);
            newTreeViewNode.set_droppingEnabled(true); 
            newTreeViewNode.set_contentCallbackUrl(g_HandlerURL  +"?function=GetNodes&siteID=" + g_SiteID + "&nodeID=" + newTreeViewNode.get_id());

            newParent.get_nodes().add(newTreeViewNode); 
            newParent.expandAll();
            
            status.html('<strong>' + currentNode.get_text() + '</strong> and its children has now been moved to <strong>' + newParent.get_text() + '</strong>');
            status.dialog('open');
        }

        function TreeView1_onContextMenu(sender, eventArgs)
        {
          // handles the context menu
          var node = eventArgs.get_node();
          
          if (node.get_parentNode() == null)
          {
              RootMenu.add_itemSelect(Menu_onItemSelect);
              RootMenu.showContextMenuAtEvent(eventArgs.get_event(), eventArgs.get_node());
              
          }else{  

            SubCategoryMenu.add_itemSelect(Menu_onItemSelect);
            SubCategoryMenu.showContextMenuAtEvent(eventArgs.get_event(), eventArgs.get_node());   

          }
        }
        
        /* start unused functionality m as assets will be managed on right hand side */
        
        function TreeView1_onNodeCheckChange(sender, eventArgs)
        {
            // TO DO: what functionality happens here? - not used any more
            
            var blnChecked = eventArgs.get_node().get_checked();
            var checkedNode = TreeView1.findNodeById(eventArgs.get_node().get_id());
            
            // check / uncheck the child nodes
            SelectChildren(checkedNode.Nodes(),blnChecked);      
        }

        function SelectChildren(childNodes, checked)
        {
            // loops through the given node and unchecks/checks them and its child nodes
            for(var i = 0; i < childNodes.length; i++)
            {
                var currentNode = childNodes[i];//TreeView1.findNodeById(childNodes[i].get_id());
                currentNode.set_checked(checked); 
                if (currentNode.Nodes().length > 0)
                {
                    SelectChildren(currentNode.Nodes(), checked);
                }
            }
        }
        /* end unused functionality m as assets will be managed on right hand side */
        
        function DeleteNode(node)
        {
            var status = $("#divStatus");
            status.text("deleting " + node.get_id());
            status.dialog('option' , 'title' , 'Node Deletion' );
            status.dialog('open');
            
            $.ajax({
                type: "GET",
                url: g_HandlerURL,
                data: "function=DeleteNode&siteID=" + g_SiteID + "&nodeID=" + node.get_id(),
                dataType: "xml",
                success: function(data) 
                {   
                    var name_text = $(data).find('nodes').text()
                    if (name_text.toString().toLowerCase() == "true")
                    {
                       // no child nodes were found and the node was soft deleted
                       //var node = TreeView1.findNodeById(nodeID);
                      
                        $(".TreeNode").droppable('destroy');
                       
                       var nodeParent = node.get_parentNode(); 
                       status.html("<strong>" + node.get_text() + "</strong> was successfully removed");
                       node.remove();
                       nodeParent.expandAll();
                       
                       MakeDroppable("TreeNode");
                
                    }else{
                        // this node has child assets / nodes therefore you cant delete it
                        status.html("<strong>You cannot delete this item, as child items have not been re-assigned</strong>");
                    }
                },
                error:function (xhr, ajaxOptions, thrownError){
                        alert(xhr.status);
                        alert(thrownError);
                }  
            });  
        }

        
        function RenameNode(node ,nodeName , updatedUserPartyGuid)
        {
            $("#divNodeElement").dialog('close');
            var status = $("#divStatus");
            status.text("renaming " + node.get_id() + " to " + nodeName);
            status.dialog('open');
            
            $.ajax({
                type: "GET",
                url: g_HandlerURL,
                data: "function=RenameNode&siteID=" + g_SiteID + "&nodeID=" + node.get_id() + "&nodeName=" + nodeName + "&updatedUserPartyGuid="+updatedUserPartyGuid,
                dataType: "xml",
                success: function(data) 
                {   var name_text = $(data).find('nodes').text()
                    if (name_text.toString().toLowerCase() == "true")
                    {
                        // node was rename successfully
                        //TreeView1.findNodeById(nodeID).set_text(nodeName); 
                        node.set_text(nodeName); 
                        status.dialog('close');
                    }else{
                        status.text("error: " + name_text.toString().toLowerCase());
                    }
                },
                error:function (xhr, ajaxOptions, thrownError){
                        alert(xhr.status);
                        alert(thrownError);
                }  
            });  
        }
        
        function CreateNode(nodeID, nodeName, updatedUserPartyGuid)
        {
            $("#divNodeElement").dialog('close');
            var status = $("#divStatus");
            status.text("Creating a sub category for " + nodeID + " called " + nodeName);
            status.dialog('open');
            
            $.ajax({
                type: "GET",
                url: g_HandlerURL,
                data: "function=CreateNode&siteID=" + g_SiteID + "&nodeID=" + nodeID + "&nodeName=" + nodeName + "&updatedUserPartyGuid=" + updatedUserPartyGuid,
                dataType: "xml",
                success: function(data) 
                {   var name_text = $(data).find('nodes').text()
                    if (name_text > 0)
                    {   
                        // create new node
                        var newTreeViewNode = new ComponentArt.Web.UI.TreeViewNode();
                        
                        // set its properties
                        newTreeViewNode.set_id(name_text);
                        newTreeViewNode.set_text(nodeName);
                        
                        //newTreeViewNode.set_showCheckBox(true);
                        newTreeViewNode.set_imageUrl(g_FolderURL); 
                        newTreeViewNode.set_draggingEnabled(true);
                        newTreeViewNode.set_droppingEnabled(true); 
                        newTreeViewNode.set_contentCallbackUrl(g_HandlerURL + "?function=GetNodes&siteID=" + g_SiteID + "&nodeID=" + newTreeViewNode.get_id());
                        
                        // append to relevent parent
                        currentNode = TreeView1.findNodeById(nodeID);
                        currentNode.get_nodes().add(newTreeViewNode); 
                        
                        try
                        {
                            // this may be a root node, so it wont have a parent to expand
                            currentNode.get_parentNode().expandAll();
                        }
                        catch(e)
                        {
                            currentNode.expandAll();
                        }
                        
                        status.text("");
                        status.dialog('close');
                        
                    }else{
                        status.text("Error: " + name_text.toString().toLowerCase());
                    }
                },
                error:function (xhr, ajaxOptions, thrownError){
                        alert(xhr.status);
                        alert(thrownError);
                }  
            });  
        }
        
        function Menu_onItemSelect(sender, eventArgs)
        {
            // handles what happens when a context menu has been clicked
            
            var menuItem = eventArgs.get_item();
            var contextDataNode = menuItem.get_parentMenu().get_contextData();
           
            var feedback = '"' + menuItem.get_text() + '" command was issued on the "' + contextDataNode.get_text() + '" node from "' + contextDataNode.get_value() + '".';
            
            var nodeID =  $("#divNodeElement #node");
            var nodeName = $("#divNodeElement #txtNodeName");
            var nodeFunction = $("#divNodeElement #function");
            var saveButton = $("#divNodeElement #lnkSaveNode");
            var updatedUserPartyGuid = $("#divNodeElement #updatedUserPartyGuid input:first");
            
            saveButton.unbind();
        
            // set the nodeid we're working with
            nodeID.val(contextDataNode.get_id());
            
            // set the function they have selected (to pass to the ashx page
            nodeFunction.val(menuItem.get_text().toLowerCase().replace(" ","_"));
            
            switch(menuItem.get_text().toLowerCase())
            {
                case 'add subcategory' : 
                                        nodeID.val(contextDataNode.get_id());
                                        nodeName.val(contextDataNode.get_text());
                                        
                                        // show the add subcategory dialog box
                                        
                                        var divNodeElement = $("#divNodeElement");
                                        divNodeElement.dialog('destroy');
                                        divNodeElement.dialog({
                                            bgiframe: true, 
                                            autoOpen: false,
                                            height: 300,
                                            modal: true,
                                            buttons : {
                                                        'Add sub category': function() 
                                                        {
                                                            // create node function
					                                        CreateNode(nodeID.val(),nodeName.val(),updatedUserPartyGuid.val());
					                                    }
				                                      ,
                                                        Cancel: function() 
                                                        { 
                                                            $(this).dialog('close');
                                                       }},
			                                close: function() {}
                                        });
                                        divNodeElement.dialog('option' , 'title' , 'Add a sub category' );
                                        divNodeElement.dialog('open');
                break;

                case 'add category' :
                                        nodeID.val(contextDataNode.get_id());
                                        nodeName.val(contextDataNode.get_text());
                                        
                                        // show the add subcategory dialog box
                                        
                                        var divNodeElement = $("#divNodeElement");
                                        divNodeElement.dialog('destroy');
                                        divNodeElement.dialog({
                                            bgiframe: true, 
                                            autoOpen: false,
                                            height: 300,
                                            modal: true,
                                            buttons : {
                                                        'Add sub category': function() 
                                                        {
                                                            // create node function
					                                        CreateNode(nodeID.val(),nodeName.val(),updatedUserPartyGuid.val());
					                                    }
				                                      ,
                                                        Cancel: function() 
                                                        { 
                                                            $(this).dialog('close');
                                                       }},
			                                close: function() {}
                                        });
                                        divNodeElement.dialog('option' , 'title' , 'Add a sub category' );
                                        divNodeElement.dialog('open');
                break;

                case 'rename' : 
                                var divNodeElement = $("#divNodeElement");
                                nodeID.val(contextDataNode.get_id());
                                nodeName.val(contextDataNode.get_text());
                                divNodeElement.dialog('destroy');
                                
                                // show the add rename node dialog box
                                
                                divNodeElement.dialog({
                                            bgiframe: true, 
                                            autoOpen: false,
                                            height: 300,
                                            modal: true,
                                            buttons : {
                                                        'Rename category': function() 
                                                        {
                                                            // Rename node function
					                                        RenameNode(contextDataNode,nodeName.val(),updatedUserPartyGuid.val());
					                                    }
				                                      ,
                                                        Cancel: function() 
                                                        { 
                                                            $(this).dialog('close');
                                                       }},
			                                close: function() {}
                                        });
                                divNodeElement.dialog('option' , 'title' , 'Rename category' );
                                divNodeElement.dialog('open');
                break;

                case 'delete' : DeleteNode(contextDataNode);
                break;

                default:
                return false;
                break;     
            }
            return true;
        }
        
        function grid_Post_Back(command)
        {
            var assetsToProcess="";
            //Find checked boxes
            $("#ctl00_ContentPlaceHolder1_grdAssetManagement TBODY input:checked").each(
            function(i) 
            { 
               var mID = $(this).attr("id");
               assetsToProcess += mID.substring(mID.lastIndexOf("_")+1,mID.length) + ",";
            });
            
            if (assetsToProcess.length < 2)
            {
                $("#divNodeElement").dialog('close');
                var status = $("#divStatus");
                status.text("Please tick the asset(s) to " + command);
                status.dialog('option' , 'title' , command + ' asset(s)');
                status.dialog('open');
            }
            else
            {
                var divNodeElement = $("#divConf");
                divNodeElement.text("");
                divNodeElement.dialog('destroy');
                divNodeElement.dialog({
                            bgiframe: true, 
                            autoOpen: false,
                            height: 50,
                            modal: true,
                            buttons : {
                                        'Yes': function() 
                                        {
                                            execute_commant(command,assetsToProcess);
                                            $(this).dialog('close');
	                                    }
                                      ,
                                        'No': function() 
                                        { 
                                            $(this).dialog('close');
                                       }},
                            close: function() {}
                        });
                divNodeElement.text("Are you sure you want to " + command + " asset(s)")
                divNodeElement.dialog('option' , 'title' , 'Confirm');
                divNodeElement.dialog('open');
                
            }
           return false;
        }
        
        //Delete Archive Assets
        function execute_commant(command,itemsSelected)
        {
            switch(command)
                {
                    case "Delete":
                        CallBack1.callback("0","Delete",itemsSelected);
                        break;
                    case "Archive":
                        CallBack1.callback("0","Archive",itemsSelected);
                        break;
                    case "Restore":
                        CallBack1.callback("0","Restore",itemsSelected);
                        break;    
                }
        }

