aboutsummaryrefslogtreecommitdiffstats
path: root/vid/src/main/webapp/static/fusion/raptor/js/tree/drag-drop-folder-tree.js
diff options
context:
space:
mode:
Diffstat (limited to 'vid/src/main/webapp/static/fusion/raptor/js/tree/drag-drop-folder-tree.js')
-rw-r--r--vid/src/main/webapp/static/fusion/raptor/js/tree/drag-drop-folder-tree.js1059
1 files changed, 1059 insertions, 0 deletions
diff --git a/vid/src/main/webapp/static/fusion/raptor/js/tree/drag-drop-folder-tree.js b/vid/src/main/webapp/static/fusion/raptor/js/tree/drag-drop-folder-tree.js
new file mode 100644
index 000000000..165306f2f
--- /dev/null
+++ b/vid/src/main/webapp/static/fusion/raptor/js/tree/drag-drop-folder-tree.js
@@ -0,0 +1,1059 @@
+ /************************************************************************************************************
+Drag and drop folder tree
+Copyright (C) 2006 DTHMLGoodies.com, Alf Magne Kalleland
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Dhtmlgoodies.com., hereby disclaims all copyright interest in this script
+written by Alf Magne Kalleland.
+
+Alf Magne Kalleland, 2006
+Owner of DHTMLgoodies.com
+
+
+************************************************************************************************************/
+
+ var JSTreeObj;
+ var treeUlCounter = 0;
+ var nodeId = 1;
+
+ /* Constructor */
+ function JSDragDropTree()
+ {
+ var idOfTree;
+ var imageFolder;
+ var folderImage;
+ var plusImage;
+ var minusImage;
+ var maximumDepth;
+ var dragNode_source;
+ var dragNode_parent;
+ var dragNode_sourceNextSib;
+ var dragNode_noSiblings;
+ var ajaxObjects;
+
+ var dragNode_destination;
+ var floatingContainer;
+ var dragDropTimer;
+ var dropTargetIndicator;
+ var insertAsSub;
+ var indicator_offsetX;
+ var indicator_offsetX_sub;
+ var indicator_offsetY;
+
+ this.imageFolder = imgFolder+'tree/';
+ this.folderImage = 'dhtmlgoodies_folder.gif';
+ this.plusImage = 'dhtmlgoodies_plus.gif';
+ this.minusImage = 'dhtmlgoodies_minus.gif';
+ this.maximumDepth = 6;
+ var messageMaximumDepthReached;
+ var messageNoRightsOnFolder;
+ var filePathRenameItem;
+ var filePathDeleteItem;
+ var additionalRenameRequestParameters = {};
+ var additionalDeleteRequestParameters = {};
+
+ var renameAllowed;
+ var deleteAllowed;
+ var addAllowed;
+ var currentlyActiveItem;
+ var contextMenu;
+ var currentItemToEdit; // Reference to item currently being edited(example: renamed)
+ var selectedItem; // ADDED BY FARHAN
+ var helpObj;
+
+ this.contextMenu = false;
+ this.floatingContainer = document.createElement('UL');
+ this.floatingContainer.style.position = 'absolute';
+ this.floatingContainer.style.display='none';
+ this.floatingContainer.id = 'floatingContainer';
+ this.insertAsSub = false;
+ document.body.appendChild(this.floatingContainer);
+ this.dragDropTimer = -1;
+ this.dragNode_noSiblings = false;
+ this.currentItemToEdit = false;
+
+ if(document.all){
+ this.indicator_offsetX = 2; // Offset position of small black lines indicating where nodes would be dropped.
+ this.indicator_offsetX_sub = 4;
+ this.indicator_offsetY = 2;
+ }else{
+ this.indicator_offsetX = 1; // Offset position of small black lines indicating where nodes would be dropped.
+ this.indicator_offsetX_sub = 3;
+ this.indicator_offsetY = 2;
+ }
+ if(navigator.userAgent.indexOf('Opera')>=0){
+ this.indicator_offsetX = 2; // Offset position of small black lines indicating where nodes would be dropped.
+ this.indicator_offsetX_sub = 3;
+ this.indicator_offsetY = -7;
+ }
+
+ this.messageMaximumDepthReached = ''; // Use '' if you don't want to display a message
+ this.messageNoRightsOnFolder = 'You do not have access to this folder';
+
+ this.renameAllowed = true;
+ this.deleteAllowed = true;
+ this.addAllowed = true;
+ this.currentlyActiveItem = false;
+ this.filePathRenameItem = 'folderTree_updateItem.php';
+ this.filePathDeleteItem = 'tree';
+ this.ajaxObjects = new Array();
+ this.helpObj = false;
+
+ this.RENAME_STATE_BEGIN = 1;
+ this.RENAME_STATE_CANCELED = 2;
+ this.RENAME_STATE_REQUEST_SENDED = 3;
+ this.renameState = null;
+ }
+
+
+ /* JSDragDropTree class */
+ JSDragDropTree.prototype = {
+ // {{{ addEvent()
+ /**
+ *
+ * This function adds an event listener to an element on the page.
+ *
+ * @param Object whichObject = Reference to HTML element(Which object to assigne the event)
+ * @param String eventType = Which type of event, example "mousemove" or "mouseup"
+ * @param functionName = Name of function to execute.
+ *
+ * @public
+ */
+ addEvent : function(whichObject,eventType,functionName)
+ {
+ if(whichObject.attachEvent){
+ whichObject['e'+eventType+functionName] = functionName;
+ whichObject[eventType+functionName] = function(){whichObject['e'+eventType+functionName]( window.event );}
+ whichObject.attachEvent( 'on'+eventType, whichObject[eventType+functionName] );
+ } else
+ whichObject.addEventListener(eventType,functionName,false);
+ }
+ // }}}
+ ,
+ // {{{ removeEvent()
+ /**
+ *
+ * This function removes an event listener from an element on the page.
+ *
+ * @param Object whichObject = Reference to HTML element(Which object to assigne the event)
+ * @param String eventType = Which type of event, example "mousemove" or "mouseup"
+ * @param functionName = Name of function to execute.
+ *
+ * @public
+ */
+ removeEvent : function(whichObject,eventType,functionName)
+ {
+ if(whichObject.detachEvent){
+ whichObject.detachEvent('on'+eventType, whichObject[eventType+functionName]);
+ whichObject[eventType+functionName] = null;
+ } else
+ whichObject.removeEventListener(eventType,functionName,false);
+ }
+ ,
+ Get_Cookie : function(name) {
+ var start = document.cookie.indexOf(name+"=");
+ var len = start+name.length+1;
+ if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
+ if (start == -1) return null;
+ var end = document.cookie.indexOf(";",len);
+ if (end == -1) end = document.cookie.length;
+ return unescape(document.cookie.substring(len,end));
+ }
+ ,
+ // This function has been slightly modified
+ Set_Cookie : function(name,value,expires,path,domain,secure) {
+ expires = expires * 60*60*24*1000;
+ var today = new Date();
+ var expires_date = new Date( today.getTime() + (expires) );
+ var cookieString = name + "=" +escape(value) +
+ ( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
+ ( (path) ? ";path=" + path : "") +
+ ( (domain) ? ";domain=" + domain : "") +
+ ( (secure) ? ";secure" : "");
+ document.cookie = cookieString;
+ }
+ ,
+ setFileNameRename : function(newFileName)
+ {
+ this.filePathRenameItem = newFileName;
+ }
+ ,
+ setFileNameDelete : function(newFileName)
+ {
+ this.filePathDeleteItem = newFileName;
+ }
+ ,
+ setAdditionalRenameRequestParameters : function(requestParameters)
+ {
+ this.additionalRenameRequestParameters = requestParameters;
+ }
+ ,
+ setAdditionalDeleteRequestParameters : function(requestParameters)
+ {
+ this.additionalDeleteRequestParameters = requestParameters;
+ }
+ ,setRenameAllowed : function(renameAllowed)
+ {
+ this.renameAllowed = renameAllowed;
+ }
+ ,
+ setDeleteAllowed : function(deleteAllowed)
+ {
+ this.deleteAllowed = deleteAllowed;
+ }
+ ,
+ setAddAllowed : function(addAllowed)
+ {
+ this.addAllowed = addAllowed;
+ }
+ ,setMaximumDepth : function(maxDepth)
+ {
+ this.maximumDepth = maxDepth;
+ }
+ ,setMessageMaximumDepthReached : function(newMessage)
+ {
+ this.messageMaximumDepthReached = newMessage;
+ }
+ ,
+ setImageFolder : function(path)
+ {
+ this.imageFolder = path;
+ }
+ ,
+ setFolderImage : function(imagePath)
+ {
+ this.folderImage = imagePath;
+ }
+ ,
+ setPlusImage : function(imagePath)
+ {
+ this.plusImage = imagePath;
+ }
+ ,
+ setMinusImage : function(imagePath)
+ {
+ this.minusImage = imagePath;
+ }
+ ,
+ setTreeId : function(idOfTree)
+ {
+ this.idOfTree = idOfTree;
+ }
+ ,
+ expandAll : function()
+ {
+ var menuItems = document.getElementById(this.idOfTree).getElementsByTagName('LI');
+ for(var no=0;no<menuItems.length;no++){
+ var subItems = menuItems[no].getElementsByTagName('UL');
+ if(subItems.length>0 && subItems[0].style.display!='block'){
+ JSTreeObj.showHideNode(false,menuItems[no].id);
+ }
+ }
+ }
+ ,
+ collapseAll : function()
+ {
+ var menuItems = document.getElementById(this.idOfTree).getElementsByTagName('LI');
+ for(var no=0;no<menuItems.length;no++){
+ var subItems = menuItems[no].getElementsByTagName('UL');
+ if(subItems.length>0 && subItems[0].style.display=='block'){
+ JSTreeObj.showHideNode(false,menuItems[no].id);
+ }
+ }
+ JSTreeObj.showHideNode(false,menuItems[0].id);
+ }
+ ,
+ /*
+ Find top pos of a tree node
+ */
+ getTopPos : function(obj){
+ var top = obj.offsetTop/1;
+ while((obj = obj.offsetParent) != null){
+ if(obj.tagName!='HTML')top += obj.offsetTop;
+ }
+ if(document.all)top = top/1 + 13; else top = top/1 + 4;
+ return top;
+ }
+ ,
+ /*
+ Find left pos of a tree node
+ */
+ getLeftPos : function(obj){
+ var left = obj.offsetLeft/1 + 1;
+ while((obj = obj.offsetParent) != null){
+ if(obj.tagName!='HTML')left += obj.offsetLeft;
+ }
+
+ if(document.all)left = left/1 - 2;
+ return left;
+ }
+
+ ,
+ showHideNode : function(e,inputId)
+ {
+ if(inputId){
+ if(!document.getElementById(inputId))return;
+ thisNode = document.getElementById(inputId).getElementsByTagName('IMG')[0];
+ }else {
+ thisNode = this;
+ if(this.tagName=='A')thisNode = this.parentNode.getElementsByTagName('IMG')[0];
+
+ }
+ if(thisNode.style.visibility=='hidden')return;
+ var parentNode = thisNode.parentNode;
+ inputId = parentNode.id.replace(/[^0-9]/g,'');
+ if(thisNode.src.indexOf(JSTreeObj.plusImage)>=0){
+ thisNode.src = thisNode.src.replace(JSTreeObj.plusImage,JSTreeObj.minusImage);
+ var ul = parentNode.getElementsByTagName('UL')[0];
+ ul.style.display='block';
+ if(!initExpandedNodes)initExpandedNodes = ',';
+ if(initExpandedNodes.indexOf(',' + inputId + ',')<0) initExpandedNodes = initExpandedNodes + inputId + ',';
+ }else{
+ thisNode.src = thisNode.src.replace(JSTreeObj.minusImage,JSTreeObj.plusImage);
+ parentNode.getElementsByTagName('UL')[0].style.display='none';
+ initExpandedNodes = initExpandedNodes.replace(',' + inputId,'');
+ }
+ JSTreeObj.Set_Cookie('dhtmlgoodies_expandedNodes',initExpandedNodes,500);
+ return false;
+ }
+ ,
+ /*expand only the selected node*/
+ showSelectedNode : function(selectedItemId)
+ {
+ var menuItems = document.getElementById(this.idOfTree).getElementsByTagName('LI'); // Get an array of all menu items
+
+ var selectedNode ;
+ for(var no=0;no<menuItems.length;no++){
+ if (selectedItemId != null && selectedItemId == menuItems[no].id.replace(/[^0-9]/gi,'')){
+ selectedNode = menuItems[no];
+ break;
+ }
+ }
+ do{
+ if (selectedNode != null){
+ var subItems = selectedNode.getElementsByTagName('UL');
+ if(subItems && subItems.length>0 && subItems[0].style.display!='block'){
+ JSTreeObj.showHideNode(false,selectedNode.id);
+ }
+ selectedNode = selectedNode.parentNode;
+ }
+ }while (selectedNode && selectedNode.id.replace(/[^0-9]/gi,'') != '0');
+ return false;
+ }
+ ,
+ isDeleteAllowed : function(selectedItemId)
+ {
+ var menuItems = document.getElementById(this.idOfTree).getElementsByTagName('LI'); // Get an array of all menu items
+
+ var selectedNode ;
+ for(var no=0;no<menuItems.length;no++){
+ if (selectedItemId != null && selectedItemId == menuItems[no].id.replace(/[^0-9]/gi,'')){
+ selectedNode = menuItems[no];
+ break;
+ }
+ }
+ if (selectedNode && selectedNode.getAttribute('noDelete') && selectedNode.getAttribute('noDelete') == 'true')
+ return false;
+ else
+ return true;
+
+ }
+ ,
+ isAddAllowed : function(selectedItemId)
+ {
+ var menuItems = document.getElementById(this.idOfTree).getElementsByTagName('LI'); // Get an array of all menu items
+
+ var selectedNode ;
+ for(var no=0;no<menuItems.length;no++){
+ if (selectedItemId != null && selectedItemId == menuItems[no].id.replace(/[^0-9]/gi,'')){
+ selectedNode = menuItems[no];
+ break;
+ }
+ }
+ if (selectedNode && selectedNode.getAttribute('noChild') && selectedNode.getAttribute('noChild') == 'true')
+ return false;
+ else
+ return true;
+
+ }
+ ,
+ /* Initialize drag */
+ initDrag : function(e)
+ {
+ if(document.all)e = event;
+
+ var subs = JSTreeObj.floatingContainer.getElementsByTagName('LI');
+ if(subs.length>0){
+ if(JSTreeObj.dragNode_sourceNextSib){
+ JSTreeObj.dragNode_parent.insertBefore(JSTreeObj.dragNode_source,JSTreeObj.dragNode_sourceNextSib);
+ }else{
+ JSTreeObj.dragNode_parent.appendChild(JSTreeObj.dragNode_source);
+ }
+ }
+
+ JSTreeObj.dragNode_source = this.parentNode;
+ JSTreeObj.dragNode_parent = this.parentNode.parentNode;
+ JSTreeObj.dragNode_sourceNextSib = false;
+
+
+ if(JSTreeObj.dragNode_source.nextSibling)JSTreeObj.dragNode_sourceNextSib = JSTreeObj.dragNode_source.nextSibling;
+ JSTreeObj.dragNode_destination = false;
+ JSTreeObj.dragDropTimer = 0;
+ JSTreeObj.timerDrag();
+ return false;
+ }
+ ,
+ timerDrag : function()
+ {
+ if(this.dragDropTimer>=0 && this.dragDropTimer<10){
+ this.dragDropTimer = this.dragDropTimer + 1;
+ setTimeout('JSTreeObj.timerDrag()',20);
+ return;
+ }
+ if(this.dragDropTimer==10)
+ {
+ JSTreeObj.floatingContainer.style.display='block';
+ JSTreeObj.floatingContainer.appendChild(JSTreeObj.dragNode_source);
+ }
+ }
+ ,
+ moveDragableNodes : function(e)
+ {
+ if(JSTreeObj.dragDropTimer<10)return;
+ if(document.all)e = event;
+ dragDrop_x = e.clientX/1 + 5 + document.body.scrollLeft;
+ dragDrop_y = e.clientY/1 + 5 + document.documentElement.scrollTop;
+
+ JSTreeObj.floatingContainer.style.left = dragDrop_x + 'px';
+ JSTreeObj.floatingContainer.style.top = dragDrop_y + 'px';
+
+ var thisObj = this;
+ if(thisObj.tagName=='A' || thisObj.tagName=='IMG')thisObj = thisObj.parentNode;
+
+ JSTreeObj.dragNode_noSiblings = false;
+ var tmpVar = thisObj.getAttribute('noSiblings');
+ if(!tmpVar)tmpVar = thisObj.noSiblings;
+ if(tmpVar=='true')JSTreeObj.dragNode_noSiblings=true;
+
+ if(thisObj && thisObj.id)
+ {
+ JSTreeObj.dragNode_destination = thisObj;
+ var img = thisObj.getElementsByTagName('IMG')[1];
+ var tmpObj= JSTreeObj.dropTargetIndicator;
+ tmpObj.style.display='block';
+
+ var eventSourceObj = this;
+ if(JSTreeObj.dragNode_noSiblings && eventSourceObj.tagName=='IMG')eventSourceObj = eventSourceObj.nextSibling;
+
+ var tmpImg = tmpObj.getElementsByTagName('IMG')[0];
+ if(this.tagName=='A' || JSTreeObj.dragNode_noSiblings){
+ tmpImg.src = tmpImg.src.replace('ind1','ind2');
+ JSTreeObj.insertAsSub = true;
+ tmpObj.style.left = (JSTreeObj.getLeftPos(eventSourceObj) + JSTreeObj.indicator_offsetX_sub) + 'px';
+ }else{
+ tmpImg.src = tmpImg.src.replace('ind2','ind1');
+ JSTreeObj.insertAsSub = false;
+ tmpObj.style.left = (JSTreeObj.getLeftPos(eventSourceObj) + JSTreeObj.indicator_offsetX) + 'px';
+ }
+
+ tmpObj.style.top = (JSTreeObj.getTopPos(thisObj) + JSTreeObj.indicator_offsetY) - document.getElementById("scrollableTable").scrollTop + 'px' ;
+
+
+ }
+ var divHeight = document.getElementById("scrollableTable").style.height;
+ divHeight = divHeight.substring(0, divHeight.indexOf("px"));
+ if (dragDrop_y - JSTreeObj.getTopPos(document.getElementById("scrollableTable"))< 50)
+ document.getElementById("scrollableTable").scrollTop = document.getElementById("scrollableTable").scrollTop - 5;
+ else if (dragDrop_y - JSTreeObj.getTopPos(document.getElementById("scrollableTable")) > divHeight - 50)
+ document.getElementById("scrollableTable").scrollTop = document.getElementById("scrollableTable").scrollTop + 5;
+
+ return false;
+
+ }
+ ,
+ dropDragableNodes:function()
+ {
+ if(JSTreeObj.dragDropTimer<10){
+ JSTreeObj.dragDropTimer = -1;
+ return;
+ }
+ var showMessage = false;
+ var message = '';
+ if(JSTreeObj.dragNode_destination){ // Check depth
+ var countUp = JSTreeObj.dragDropCountLevels(JSTreeObj.dragNode_destination,'up');
+ var countDown = JSTreeObj.dragDropCountLevels(JSTreeObj.dragNode_source,'down');
+ var countLevels = countUp/1 + countDown/1 + (JSTreeObj.insertAsSub?1:0);
+
+ if(countLevels>JSTreeObj.maximumDepth){
+ JSTreeObj.dragNode_destination = false;
+ showMessage = true; // Used later down in this function
+ message = JSTreeObj.messageMaximumDepthReachedl
+ }
+ }
+ if (JSTreeObj.dragNode_destination && JSTreeObj.dragNode_destination.getAttribute('noDrop') == 'true'){
+ JSTreeObj.dragNode_destination = false;
+ showMessage = true; // Used later down in this function
+ message = JSTreeObj.messageNoRightsOnFolder;
+ }
+
+
+ if(JSTreeObj.dragNode_destination){
+
+ if(JSTreeObj.insertAsSub){
+ var uls = JSTreeObj.dragNode_destination.getElementsByTagName('UL');
+ if(uls.length>0){
+ ul = uls[0];
+ ul.style.display='block';
+
+ var lis = ul.getElementsByTagName('LI');
+
+ if(lis.length>0){ // Sub elements exists - drop dragable node before the first one
+ ul.insertBefore(JSTreeObj.dragNode_source,lis[0]);
+ }else { // No sub exists - use the appendChild method - This line should not be executed unless there's something wrong in the HTML, i.e empty <ul>
+ ul.appendChild(JSTreeObj.dragNode_source);
+ }
+ }else{
+ var ul = document.createElement('UL');
+ ul.style.display='block';
+ JSTreeObj.dragNode_destination.appendChild(ul);
+ ul.appendChild(JSTreeObj.dragNode_source);
+ }
+ var img = JSTreeObj.dragNode_destination.getElementsByTagName('IMG')[0];
+ img.style.visibility='visible';
+ img.src = img.src.replace(JSTreeObj.plusImage,JSTreeObj.minusImage);
+
+
+ }else{
+ if(JSTreeObj.dragNode_destination.nextSibling){
+ var nextSib = JSTreeObj.dragNode_destination.nextSibling;
+ nextSib.parentNode.insertBefore(JSTreeObj.dragNode_source,nextSib);
+ }else{
+ JSTreeObj.dragNode_destination.parentNode.appendChild(JSTreeObj.dragNode_source);
+ }
+ }
+ /* Clear parent object */
+ var tmpObj = JSTreeObj.dragNode_parent;
+ var lis = tmpObj.getElementsByTagName('LI');
+ if(lis.length==0){
+ var img = tmpObj.parentNode.getElementsByTagName('IMG')[0];
+ img.style.visibility='hidden'; // Hide [+],[-] icon
+ tmpObj.parentNode.removeChild(tmpObj);
+ }
+
+ }else{
+ // Putting the item back to it's original location
+
+ if(JSTreeObj.dragNode_sourceNextSib){
+ JSTreeObj.dragNode_parent.insertBefore(JSTreeObj.dragNode_source,JSTreeObj.dragNode_sourceNextSib);
+ }else{
+ JSTreeObj.dragNode_parent.appendChild(JSTreeObj.dragNode_source);
+ }
+
+ }
+ JSTreeObj.dropTargetIndicator.style.display='none';
+ JSTreeObj.dragDropTimer = -1;
+ if(showMessage && message){ alert(message); return;}
+ //save tree structure
+ saveMyTree_byForm();
+ }
+ ,
+ createDropIndicator : function()
+ {
+ this.dropTargetIndicator = document.createElement('DIV');
+ this.dropTargetIndicator.style.position = 'absolute';
+ this.dropTargetIndicator.style.display='none';
+ var img = document.createElement('IMG');
+ img.src = this.imageFolder + 'dragDrop_ind1.gif';
+ img.id = 'dragDropIndicatorImage';
+ this.dropTargetIndicator.appendChild(img);
+ document.body.appendChild(this.dropTargetIndicator);
+
+ }
+ ,
+ dragDropCountLevels : function(obj,direction,stopAtObject){
+ var countLevels = 0;
+ if(direction=='up'){
+ while(obj.parentNode && obj.parentNode!=stopAtObject){
+ obj = obj.parentNode;
+ if(obj.tagName=='UL')countLevels = countLevels/1 +1;
+ }
+ return countLevels;
+ }
+
+ if(direction=='down'){
+ var subObjects = obj.getElementsByTagName('LI');
+ for(var no=0;no<subObjects.length;no++){
+ countLevels = Math.max(countLevels,JSTreeObj.dragDropCountLevels(subObjects[no],"up",obj));
+ }
+ return countLevels;
+
+ }
+ }
+ ,
+ cancelEvent : function()
+ {
+ return false;
+ }
+ ,
+ cancelSelectionEvent : function()
+ {
+
+ if(JSTreeObj.dragDropTimer<10)return true;
+ return false;
+ }
+ ,getNodeOrders : function(initObj,saveString)
+ {
+
+ if(!saveString)var saveString = '';
+ if(!initObj){
+ initObj = document.getElementById(this.idOfTree);
+
+ }
+ var lis = initObj.getElementsByTagName('LI');
+
+ if(lis.length>0){
+ var li = lis[0];
+ while(li){
+ if(li.id){
+ if(saveString.length>0)saveString = saveString + ',';
+ var numericID = li.id.replace(/[^0-9]/gi,'');
+ if(numericID.length==0)numericID='A';
+ var numericParentID = li.parentNode.parentNode.id.replace(/[^0-9]/gi,'');
+ if(numericID!='0'){
+ saveString = saveString + numericID;
+ saveString = saveString + '-';
+
+
+ if(li.parentNode.id!=this.idOfTree)saveString = saveString + numericParentID; else saveString = saveString + '0';
+ }
+ var ul = li.getElementsByTagName('UL');
+ if(ul.length>0){
+ saveString = this.getNodeOrders(ul[0],saveString);
+ }
+ }
+ li = li.nextSibling;
+ }
+ }
+
+ if(initObj.id == this.idOfTree){
+ return saveString;
+
+ }
+ return saveString;
+ }
+ ,highlightItem : function(inputObj,e)
+ {
+ if(JSTreeObj.currentlyActiveItem)JSTreeObj.currentlyActiveItem.className = '';
+ this.className = 'highlightedNodeItem';
+ JSTreeObj.currentlyActiveItem = this;
+ }
+ ,clickItem : function(inputObj,e)
+ {
+ if(JSTreeObj.currentlyActiveItem) JSTreeObj.currentlyActiveItem.className = '';
+ this.className = 'highlightedNodeItem';
+ JSTreeObj.currentlyActiveItem = this;
+ JSTreeObj.selectedItem = this;
+ },
+ removeHighlight : function()
+ {
+ //if(JSTreeObj.currentlyActiveItem)JSTreeObj.currentlyActiveItem.className = '';
+ //JSTreeObj.currentlyActiveItem = false;
+ }
+ ,
+ hasSubNodes : function(obj)
+ {
+ var subs = obj.getElementsByTagName('LI');
+ if(subs.length>0)return true;
+ return false;
+ }
+ ,
+ deleteItem : function(obj1,obj2)
+ {
+ var message = 'Click OK to delete item ' + obj2.innerHTML;
+ if(this.hasSubNodes(obj2.parentNode)) message = message + ' and it\'s sub nodes';
+ if(confirm(message)){
+ this.__deleteItem_step2(obj2.parentNode); // Sending <LI> tag to the __deleteItem_step2 method
+ //deleteItem();
+ }else{
+ return false;
+ }
+
+
+ }
+ ,
+ addItem : function(obj1,obj2)
+ {
+ var message = 'Click OK to Add item ' + obj2.innerHTML;
+ return this.__addItem_step2(obj2.parentNode); // Sending <LI> tag to the __addItem_step2 method
+ }
+ ,
+ createMenuReport : function(obj1,obj2)
+ {
+ JSTreeObj.selectedItem = obj2;
+ createReport();
+ }
+ ,
+ runMenuReport : function(obj1,obj2)
+ {
+ JSTreeObj.selectedItem = obj2;
+ runReport();
+
+ }
+ ,
+ editMenuReport : function(obj1,obj2)
+ {
+ JSTreeObj.selectedItem = obj2;
+ editReport();
+ }
+ ,
+ deleteMenuReport : function(obj1,obj2)
+ {
+ JSTreeObj.selectedItem = obj2;
+ if (confirm("Do you want to delete this report?")){
+ deleteReport();
+ }
+
+ }
+ ,
+ __refreshDisplay : function(obj)
+ {
+ if(this.hasSubNodes(obj))return;
+
+ var img = obj.getElementsByTagName('IMG')[0];
+ img.style.visibility = 'hidden';
+ }
+ ,
+ __deleteItem_step2 : function(obj)
+ {
+
+ var saveString = obj.id.replace(/[^0-9]/gi,'');
+
+ var lis = obj.getElementsByTagName('LI');
+ for(var no=0;no<lis.length;no++){
+ saveString = saveString + ',' + lis[no].id.replace(/[^0-9]/gi,'');
+ }
+
+ // Creating ajax object and send items
+ var ajaxIndex = JSTreeObj.ajaxObjects.length;
+ JSTreeObj.ajaxObjects[ajaxIndex] = new sack();
+ JSTreeObj.ajaxObjects[ajaxIndex].method = "GET";
+ JSTreeObj.ajaxObjects[ajaxIndex].setVar("deleteIds", saveString);
+ document.all.deleteIds.value=saveString;
+ JSTreeObj.__addAdditionalRequestParameters(JSTreeObj.ajaxObjects[ajaxIndex], JSTreeObj.additionalDeleteRequestParameters);
+ JSTreeObj.ajaxObjects[ajaxIndex].requestFile = JSTreeObj.filePathDeleteItem; // Specifying which file to get
+ JSTreeObj.ajaxObjects[ajaxIndex].onCompletion = function() { JSTreeObj.__deleteComplete(ajaxIndex,obj); } ; // Specify function that will be executed after file has been found
+ //JSTreeObj.ajaxObjects[ajaxIndex].runAJAX(); // Execute AJAX function
+ deleteMyTree_byForm();
+
+
+ }
+ ,
+ __addItem_step2 : function(obj)
+ {
+ var parentId = obj.id.replace(/[^0-9]/gi,'');
+ document.all.newName.value="";
+ document.all.saveString.value=parentId;
+ if (selectedFolderId)
+ selectedFolderId = parentId;
+
+ addMyTree_byForm();
+
+ }
+ ,
+ __deleteComplete : function(ajaxIndex,obj)
+ {
+ if(this.ajaxObjects[ajaxIndex].response!='OK'){
+ alert('ERROR WHEN TRYING TO DELETE NODE: ' + this.ajaxObjects[ajaxIndex].response); // Rename failed
+ }else{
+ var parentRef = obj.parentNode.parentNode;
+ obj.parentNode.removeChild(obj);
+ this.__refreshDisplay(parentRef);
+
+ }
+
+ }
+ ,
+ __renameComplete : function(ajaxIndex)
+ {
+ if(this.ajaxObjects[ajaxIndex].response!='OK'){
+ alert('ERROR WHEN TRYING TO RENAME NODE: ' + this.ajaxObjects[ajaxIndex].response); // Rename failed
+ }
+ }
+ ,
+ __saveTextBoxChanges : function(e,inputObj)
+ {
+ if(!inputObj && this)inputObj = this;
+ if(document.all)e = event;
+ if(e.keyCode && e.keyCode==27){
+ JSTreeObj.__cancelRename(e,inputObj);
+ return;
+ }
+ inputObj.style.display='none';
+ inputObj.nextSibling.style.visibility='visible';
+ if(inputObj.value.length>0){
+ inputObj.nextSibling.innerHTML = inputObj.value;
+ // Send changes to the server.
+ if (JSTreeObj.renameState != JSTreeObj.RENAME_STATE_BEGIN) {
+ return;
+ }
+ JSTreeObj.renameState = JSTreeObj.RENAME_STATE_REQUEST_SENDED;
+ var ajaxIndex = JSTreeObj.ajaxObjects.length;
+ JSTreeObj.ajaxObjects[ajaxIndex] = new sack();
+ JSTreeObj.ajaxObjects[ajaxIndex].method = "GET";
+ JSTreeObj.ajaxObjects[ajaxIndex].setVar("renameId", inputObj.parentNode.id.replace(/[^0-9]/gi,''));
+ JSTreeObj.ajaxObjects[ajaxIndex].setVar("newName", inputObj.value);
+ JSTreeObj.__addAdditionalRequestParameters(JSTreeObj.ajaxObjects[ajaxIndex], JSTreeObj.additionalRenameRequestParameters);
+ JSTreeObj.ajaxObjects[ajaxIndex].requestFile = JSTreeObj.filePathRenameItem; // Specifying which file to get
+ JSTreeObj.ajaxObjects[ajaxIndex].onCompletion = function() { JSTreeObj.__renameComplete(ajaxIndex); } ; // Specify function that will be executed after file has been found
+ JSTreeObj.ajaxObjects[ajaxIndex].runAJAX(); // Execute AJAX function
+
+ document.all.renameId.value=inputObj.parentNode.id.replace(/[^0-9]/gi,'');
+ document.all.newName.value= inputObj.value;
+ renameMyTree_byForm();
+
+ }
+ }
+ ,
+ __cancelRename : function(e,inputObj)
+ {
+ JSTreeObj.renameState = JSTreeObj.RENAME_STATE_CANCELD;
+ if(!inputObj && this)inputObj = this;
+ inputObj.value = JSTreeObj.helpObj.innerHTML;
+ inputObj.nextSibling.innerHTML = JSTreeObj.helpObj.innerHTML;
+ inputObj.style.display = 'none';
+ inputObj.nextSibling.style.visibility = 'visible';
+ }
+ ,
+ __renameCheckKeyCode : function(e)
+ {
+ if(document.all)e = event;
+ if(e.keyCode==13){ // Enter pressed
+ JSTreeObj.__saveTextBoxChanges(false,this);
+ }
+ if(e.keyCode==27){ // ESC pressed
+ JSTreeObj.__cancelRename(false,this);
+ }
+ }
+ ,
+ __createTextBox : function(obj)
+ {
+ var textBox = document.createElement('INPUT');
+ textBox.className = 'folderTreeTextBox';
+ textBox.value = obj.innerHTML;
+ obj.parentNode.insertBefore(textBox,obj);
+ textBox.id = 'textBox' + obj.parentNode.id.replace(/[^0-9]/gi,'');
+ textBox.onblur = this.__saveTextBoxChanges;
+ textBox.onkeydown = this.__renameCheckKeyCode;
+ textBox.style.height="16px";
+ this.__renameEnableTextBox(obj);
+ }
+ ,
+ __renameEnableTextBox : function(obj)
+ {
+ JSTreeObj.renameState = JSTreeObj.RENAME_STATE_BEGIN;
+ obj.style.visibility = 'hidden';
+ obj.previousSibling.value = obj.innerHTML;
+ obj.previousSibling.style.display = 'inline';
+ obj.previousSibling.select();
+ }
+ ,
+ renameItem : function(obj1,obj2)
+ {
+ currentItemToEdit = obj2.parentNode; // Reference to the <li> tag.
+ if(!obj2.previousSibling || obj2.previousSibling.tagName.toLowerCase()!='input'){
+ this.__createTextBox(obj2);
+ }else{
+ this.__renameEnableTextBox(obj2);
+ }
+ this.helpObj.innerHTML = obj2.innerHTML;
+
+ }
+ ,
+ initTree : function(selectedItemId)
+ {
+ JSTreeObj = this;
+ JSTreeObj.createDropIndicator();
+ document.documentElement.onselectstart = JSTreeObj.cancelSelectionEvent;
+ document.documentElement.ondragstart = JSTreeObj.cancelEvent;
+ document.documentElement.onmousedown = JSTreeObj.removeHighlight;
+
+ /* Creating help object for storage of values */
+ this.helpObj = document.createElement('DIV');
+ this.helpObj.style.display = 'none';
+ document.body.appendChild(this.helpObj);
+ /* Create context menu */
+ if(this.deleteAllowed || this.renameAllowed || this.addAllowed){
+ try{
+ /* Creating menu model for the context menu, i.e. the datasource */
+ var menuModel = new DHTMLGoodies_menuModel();
+ if(this.deleteAllowed)menuModel.addItem(1,'Delete Folder','','',false,'JSTreeObj.deleteItem');
+ if(this.deleteAllowed)menuModel.addItem(2,'Rename Folder','','',false,'JSTreeObj.renameItem');
+ if(this.addAllowed)menuModel.addItem(3,'New Folder','','',false,'JSTreeObj.addItem');
+ menuModel.addItem(4,'Create Report','','',false,'JSTreeObj.createMenuReport');
+ menuModel.init();
+
+ /*For Reports*/
+ var menuReportNoRights = new DHTMLGoodies_menuModel();
+ menuReportNoRights.addItem(3,'Run','','',false,'JSTreeObj.runItem');
+ menuReportNoRights.init();
+
+ var menuReportWithRights = new DHTMLGoodies_menuModel();
+ menuReportWithRights.addItem(1,'Run','','',false,'JSTreeObj.runMenuReport');
+ menuReportWithRights.addItem(2,'Edit','','',false,'JSTreeObj.editMenuReport');
+ menuReportWithRights.addItem(3,'Delete','','',false,'JSTreeObj.deleteMenuReport');
+ menuReportWithRights.init();
+
+
+ var menuModelRenameOnly = new DHTMLGoodies_menuModel();
+ if(this.renameAllowed)menuModelRenameOnly.addItem(3,'Rename Folder','','',false,'JSTreeObj.renameItem');
+ menuModelRenameOnly.init();
+
+ var menuModelDeleteOnly = new DHTMLGoodies_menuModel();
+ if(this.deleteAllowed)menuModelDeleteOnly.addItem(4,'Delete Folder','','',false,'JSTreeObj.deleteItem');
+ menuModelDeleteOnly.init();
+
+ var menuModelAddOnly = new DHTMLGoodies_menuModel();
+ menuModelAddOnly.addItem(1,'New Folder','','',false,'JSTreeObj.addItem');
+ menuModelAddOnly.init();
+
+ window.refToDragDropTree = this;
+
+ this.contextMenu = new DHTMLGoodies_contextMenu();
+ this.contextMenu.setWidth(120);
+ referenceToDHTMLSuiteContextMenu = this.contextMenu;
+ }catch(e){
+
+ }
+ }
+
+
+ var nodeId = 0;
+ var dhtmlgoodies_tree = document.getElementById(this.idOfTree);
+ var menuItems = dhtmlgoodies_tree.getElementsByTagName('LI'); // Get an array of all menu items
+ for(var no=0;no<menuItems.length;no++){
+ // No children var set ?
+ var noChildren = false;
+ var tmpVar = menuItems[no].getAttribute('noChildren');
+ if(!tmpVar)tmpVar = menuItems[no].noChildren;
+ if(tmpVar=='true')noChildren=true;
+ // No drag var set ?
+ var noDrag = false;
+ var tmpVar = menuItems[no].getAttribute('noDrag');
+ if(!tmpVar)tmpVar = menuItems[no].noDrag;
+ if(tmpVar=='true')noDrag=true;
+
+ nodeId++;
+ var subItems = menuItems[no].getElementsByTagName('UL');
+ var img = document.createElement('IMG');
+ img.src = this.imageFolder + this.plusImage;
+ img.onclick = JSTreeObj.showHideNode;
+
+ if(subItems.length==0)img.style.visibility='hidden';else{
+ subItems[0].id = 'tree_ul_' + treeUlCounter;
+ treeUlCounter++;
+ }
+ var aTag = menuItems[no].getElementsByTagName('A')[0];
+ aTag.id = 'nodeATag' + menuItems[no].id.replace(/[^0-9]/gi,'');
+ //aTag.onclick = JSTreeObj.showHideNode;
+ if(!noDrag)aTag.onmousedown = JSTreeObj.initDrag;
+ if(!noChildren)aTag.onmousemove = JSTreeObj.moveDragableNodes;
+ menuItems[no].insertBefore(img,aTag);
+ //menuItems[no].id = 'dhtmlgoodies_treeNode' + nodeId;
+ var folderImg = document.createElement('IMG');
+ if(!noDrag)folderImg.onmousedown = JSTreeObj.initDrag;
+ folderImg.onmousemove = JSTreeObj.moveDragableNodes;
+ if(menuItems[no].className){
+ folderImg.src = this.imageFolder + menuItems[no].className;
+ } else if (menuItems[no].getAttribute('imgFile')){
+ folderImg.src = this.imageFolder + menuItems[no].getAttribute('imgFile');
+ } else{
+ folderImg.src = this.imageFolder + this.folderImage;
+ }
+ menuItems[no].insertBefore(folderImg,aTag);
+
+ if(this.contextMenu){
+ var noDelete = menuItems[no].getAttribute('noDelete');
+ if(!noDelete)noDelete = menuItems[no].noDelete;
+ var noRename = menuItems[no].getAttribute('noRename');
+ if(!noRename)noRename = menuItems[no].noRename;
+ var noAdd = menuItems[no].getAttribute('noChild');
+ if(!noAdd)noAdd = menuItems[no].noChild;
+
+
+ if (menuItems[no].id.replace(/[^0-9]/gi,'').substr(0,3) != '000' ){//for folders
+ if(noRename=='true' && noDelete=='true'){
+ if (noAdd != 'true'){
+ this.contextMenu.attachToElement(aTag,false,menuModelAddOnly);
+ }
+ }else{
+ if(noDelete == 'true')this.contextMenu.attachToElement(aTag,false,menuModelRenameOnly);
+ else if(noRename == 'true')this.contextMenu.attachToElement(aTag,false,menuModelDeleteOnly);
+ else this.contextMenu.attachToElement(aTag,false,menuModel);
+
+ }
+ }else{//for reports
+ var noRights = menuItems[no].getAttribute('noReportRights');
+ if(!noRights)noRights = menuItems[no].noRights;
+ if(noRights=='true'){
+ this.contextMenu.attachToElement(aTag,false,menuReportNoRights);
+ }else{
+ this.contextMenu.attachToElement(aTag,false,menuReportWithRights);
+ }
+
+
+ }
+ }
+ //highlighting the selected item
+ if (selectedItemId != null && selectedItemId == menuItems[no].id.replace(/[^0-9]/gi,'')){
+ if(JSTreeObj.currentlyActiveItem) JSTreeObj.currentlyActiveItem.className = '';
+ aTag.className = 'highlightedNodeItem';
+ JSTreeObj.currentlyActiveItem = aTag;
+ JSTreeObj.selectedItem = aTag;
+ folderImg.tabindex="1";
+ //alert(1);
+ //folderImg.focus();
+ }
+ this.addEvent(aTag,'contextmenu',this.highlightItem);
+ this.addEvent(aTag,'click',this.clickItem);
+
+
+
+ }
+
+
+
+ initExpandedNodes = this.Get_Cookie('dhtmlgoodies_expandedNodes');
+ if(initExpandedNodes){
+ var nodes = initExpandedNodes.split(',');
+ for(var no=0;no<nodes.length;no++){
+ if(nodes[no])this.showHideNode(false,nodes[no]);
+ }
+ }
+
+
+
+
+ document.documentElement.onmousemove = JSTreeObj.moveDragableNodes;
+ document.documentElement.onmouseup = JSTreeObj.dropDragableNodes;
+ }
+ ,
+ __addAdditionalRequestParameters : function(ajax, parameters)
+ {
+ for (var parameter in parameters) {
+ ajax.setVar(parameter, parameters[parameter]);
+ }
+ }
+ } \ No newline at end of file