export declare const NSListCode = "var nsModuleExport = function(root,name,prototype)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\tmodule.exports[name] = prototype;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\tdefine(name,[], function () {return prototype;});\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\texports[name] = prototype;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\troot[name] = prototype;\r\n\t\t}\r\n\t};var nsIsWeb = function(root)\r\n\t{\r\n\t\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if (typeof define === \"function\" && define.amd)\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse if(typeof exports === 'object')\r\n\t\t{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\treturn true;\r\n\t\t}\r\n\t};if(!nsIsWeb())\r\n\t\t{\r\nvar nsutilRef = require('./nsUtil.min.js');\r\nvar NSUtil = nsutilRef.NSUtil;\r\nvar nscontainerbaseRef = require('./nsContainerBase.min.js');\r\nvar nsExtendPrototype = nscontainerbaseRef.nsExtendPrototype;\r\nvar NSContainerBase = nscontainerbaseRef.NSContainerBase;\r\nvar svgRef = require('./nsSVG.min.js');\r\nvar NSSvg = svgRef.NSSvg;\r\nvar NSSvgShapes = svgRef.NSSvgShapes;\r\nvar plugginsRef = require('./nsPluggins.min.js');\r\nvar nsTextEditor = plugginsRef.nsTextEditor;\r\nvar nsTextAreaEditor = plugginsRef.nsTextAreaEditor;\r\nvar NSCellSelection = plugginsRef.NSCellSelection;\r\nvar NSTableCellNavigator = plugginsRef.NSTableCellNavigator;\r\nvar dateutilRef = require('./nsDateUtil.min.js');\r\nvar NSDateUtil = dateutilRef.NSDateUtil;\r\n\r\n\t\t}\r\nvar NSDragDrop = (function()\r\n{\r\n\tvar NSDragDrop = function(setting)\r\n\t{\r\n\t\tthis.ITEM_DROPPING = \"itemDropping\";\r\n\t\tthis.ITEM_DROPPED = \"itemDropped\";\r\n\t\tthis.DRAG_STARTING = \"dragStarting\";\r\n\t\tthis.DRAG_STARTED = \"dragStarted\";\r\n\t\tthis.DRAGGING = \"dragging\";\r\n\t\tthis.DRAG_END = \"dragEnd\";\r\n\t\t\r\n\t\tthis.__setting = setting;\r\n\t\tthis.util = new NSUtil();\r\n\t\tthis.__id = null;\r\n\t\tthis.__config = null;\r\n\t\tthis.__data = null;\r\n\t\t\r\n\t\tthis.__parentContainerType = null;\r\n\t\tthis.__divMovable = null;\r\n\t\tthis.__compPlaceholder = null;\r\n\t\tthis.__itemPosition = null;\r\n\t\tthis.__objSelectedItem = {scrollableContainer:null,containment:null};\r\n\t\tthis.__lastTarget = null;\r\n\t\tthis.__isDragging = false;\r\n\t\tthis.__holdTimeoutInterval = -1;\r\n\t\tthis.__documentMouseMoveRef = null;\r\n\t\tthis.__documentMouseUpRef = null;\r\n\t\tthis.__documentMouseMoveHoldRef = null;\r\n\t\tthis.__documentMouseUpHoldRef = null;\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.remove = function() \r\n\t{ \r\n\t\t\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.setDragData = function(data) \r\n\t{ \r\n\t\tthis.__data = data;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.getDragData = function() \r\n\t{ \r\n\t\treturn this.__data;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__initialize = function()\r\n\t{\r\n\t\tif(this.__setting)\r\n\t\t{\r\n\t\t\tthis.__config = {\r\n\t\t\t\t\tcontainer: this.__setting[\"container\"] || null,\r\n\t\t\t\t\tchildNodeType: this.__setting[\"childNodeType\"] || null,\r\n\t\t\t\t\tisContainerDraggable:(this.util.isUndefinedOrNull(this.__setting[\"isContainerDraggable\"]) ? true : Boolean.parse(this.__setting[\"isContainerDraggable\"])),\r\n\t\t\t\t\tisContainerDroppable:(this.util.isUndefinedOrNull(this.__setting[\"isContainerDroppable\"]) ? true : Boolean.parse(this.__setting[\"isContainerDroppable\"])),\r\n\t\t\t\t\tenableDragByHandle: Boolean.parse(this.__setting[\"enableDragByHandle\"]),\r\n\t\t\t\t\tdragHandlerClass: this.__setting[\"dragHandlerClass\"] || \"nsDragHandler\",\r\n\t\t\t\t\tenableDragAfterHold: Boolean.parse(this.__setting[\"enableDragAfterHold\"]),\r\n\t\t\t\t\tenableCloneMode: Boolean.parse(this.__setting[\"enableCloneMode\"]),\r\n\t\t\t\t\tholdTime:(this.util.isUndefinedOrNull(this.__setting[\"holdTime\"]) ? 500 : parseInt(this.__setting[\"holdTime\"])),\r\n\t\t\t\t\tcreateCloneCallback: (this.__setting[\"createCloneCallback\"] ? this.util.getFunction(this.__setting[\"createCloneCallback\"]) : null),\r\n\t\t\t\t\tcreatePlaceholderCallback: (this.__setting[\"createPlaceholderCallback\"] ? this.util.getFunction(this.__setting[\"createPlaceholderCallback\"]) : null),\r\n\t\t\t\t\tnodeDroppableCallback: (this.__setting[\"nodeDroppableCallback\"] ? this.util.getFunction(this.__setting[\"nodeDroppableCallback\"]) : null),\r\n\t\t\t\t\tnodeDraggableCallback: (this.__setting[\"containerDroppableCallback\"] ? this.util.getFunction(this.__setting[\"containerDroppableCallback\"]) : null),\r\n\t\t\t\t\tinsertNodeCallback: (this.__setting[\"insertNodeCallback\"] ? this.util.getFunction(this.__setting[\"insertNodeCallback\"]) : null),\r\n\t\t\t\t\tmoveNodeCallback: (this.__setting[\"moveNodeCallback\"] ? this.util.getFunction(this.__setting[\"moveNodeCallback\"]) : null),\r\n\t\t\t\t\tremoveNodeCallback: (this.__setting[\"removeNodeCallback\"] ? this.util.getFunction(this.__setting[\"removeNodeCallback\"]) : null),\r\n\t\t\t\t\tnodeDragHoverClass: this.__setting[\"nodeDragHoverClass\"] || \"nsNodeDragHover\",\r\n\t\t\t\t\tnodeDraggingClass: this.__setting[\"nodeDraggingClass\"] || \"nsNodeDraggingClass\"\r\n\t\t\t};\r\n\t\t\tif(this.__config.container && this.__config.childNodeType)\r\n\t\t\t{\r\n\t\t\t\tthis.__parentContainerType = this.__config.container.tagName;\r\n\t\t\t\tthis.__prepareContainer();\r\n\t\t\t\tthis.__initializeChildren();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__initializeChildren = function()\r\n\t{\r\n\t\tvar arrChildNode = this.__config.container.getElementsByTagName(this.__config.childNodeType);\r\n\t\tvar childNode = null;\r\n\t\tfor (var count = 0; count < arrChildNode.length; count++) \r\n\t\t{\r\n\t\t\tchildNode = arrChildNode[count];\r\n\t\t\tthis.__prepareChildNode(childNode,count);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__prepareContainer = function()\r\n\t{\r\n\t\tvar container = this.__config.container;\r\n\t\tvar nsObject = {};\r\n\t\tnsObject.id = this.__getID(); \r\n\t\tnsObject.isDraggable = this.__config.isContainerDraggable;\r\n\t\tnsObject.isDroppable = this.__config.isContainerDroppable;\r\n\t\tnsObject.insertNode = this.__insertNode.bind(this);\r\n\t\tnsObject.moveNode = this.__moveNode.bind(this);\r\n\t\tnsObject.removeNode = this.__removeNode.bind(this);\r\n\t\tcontainer.nsObject = nsObject;\r\n\t\tvar draggableClass = nsObject.isDraggable ? \"nsDraggableContainer\" : \"nsNonDraggableContainer\";\r\n\t\tvar droppableClass = nsObject.isDroppable ? \"nsDroppableContainer\" : \"nsNonDroppableContainer\";\r\n\t\tthis.util.addStyleClass(container,draggableClass);\t\r\n\t\tthis.util.addStyleClass(container,droppableClass);\r\n\t\tvar containerWebNode = this.util.getWebComponentElement(container);\r\n\t\tcontainerWebNode.nsObject = nsObject;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__prepareChildNode = function(childNode,index)\r\n\t{\r\n\t\tvar isDragEnabled = this.__isNodeDraggable(childNode);\r\n\t\tvar isDropEnabled = this.__isNodeDroppable(childNode);\r\n\t\tvar nsObject = {};\r\n\t\tnsObject.parent = this.__config.container;\r\n\t\tnsObject.index = index;\r\n\t\tthis.util.removeStyleClass(childNode,this.__config.nodeDragHoverClass);\r\n\t\tif(isDragEnabled) \r\n\t\t{\r\n\t\t\tnsObject.position = this.util.getOffSet(childNode);\r\n\t\t\tthis.util.addStyleClass(childNode,\"nsNodeDragEnabled\");\t\r\n\t\t\tif(this.__config.enableDragByHandle)\r\n\t\t\t{\r\n\t\t\t\tvar handle = childNode.querySelector(\".\" + this.__config.dragHandlerClass);\r\n\t\t\t\tif(handle)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.addEvent(handle,\"mousedown\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t\t\tthis.util.addEvent(handle,\"touchstart\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t\t\tthis.util.addEvent(childNode,\"mousedown\",this.__dragStartPreventHandler.bind(this));\r\n\t\t\t\t\tthis.util.addEvent(childNode,\"touchstart\",this.__dragStartPreventHandler.bind(this));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(this.__config.enableDragAfterHold)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addEvent(childNode,\"mousedown\",this.__childHoldMouseDownHandler.bind(this));\r\n\t\t\t\tthis.util.addEvent(childNode,\"touchstart\",this.__childHoldMouseDownHandler.bind(this));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.util.addEvent(childNode,\"mousedown\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t\tthis.util.addEvent(childNode,\"touchstart\",this.__childMouseDownHandler.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(childNode,\"nsNodeDragDisable\");\t\t\t\t\t\r\n\t\t}\r\n\t\tnsObject.dragEnabled = isDragEnabled;\r\n\t\tnsObject.dropEnabled = isDropEnabled;\r\n\t\tchildNode.nsObject = nsObject;\r\n\t\tvar childWebNode = this.util.getWebComponentElement(childNode);\r\n\t\tchildWebNode.nsObject = nsObject;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__childHoldMouseDownHandler= function(event)\r\n\t{\r\n\t\tthis.__clearHoldTime();\r\n\t\tvar self = this;\r\n\t\tthis.__holdTimeoutInterval = setTimeout(function () {\r\n\t         self.__childMouseDownHandler.bind(self)(event);\r\n\t       },this.__config.holdTime);\r\n\t\tthis.__addDocumentHoldListener();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseMoveHoldHandler = function(event)\r\n\t{\r\n\t\tthis.__clearHoldTime();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseUpHoldHandler = function(event)\r\n\t{\r\n\t\tthis.__clearHoldTime();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__childMouseDownHandler= function(event)\r\n\t{\r\n\t\tif(!this.__isDragging)\r\n\t\t{\r\n\t\t\tthis.__clearHoldTime();\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t    var target = this.util.getTarget(event);\r\n\t\t    target = this.util.findParent(target,this.__config.childNodeType);\r\n\t\t    if(target && target[\"nsObject\"] && target[\"nsObject\"][\"dragEnabled\"] && target[\"nsObject\"][\"parent\"] \r\n\t\t    \t&& target[\"nsObject\"][\"parent\"][\"nsObject\"] && target[\"nsObject\"][\"parent\"][\"nsObject\"][\"isDraggable\"])\r\n\t\t\t{\r\n\t\t    \tvar cancelled = this.util.dispatchEvent(this.__config.container,this.DRAG_STARTING,{node:target},{node:target},true,true);\r\n\t\t \t\tif(!cancelled)\r\n\t\t \t\t{\r\n\t\t\t    \tthis.__isDragging = true;\r\n\t\t\t    \tthis.__addDocumentListener();\r\n\t\t\t    \t//TODO: Find parent with scroll\r\n\t\t\t    \tthis.__objSelectedItem.scrollableContainer = document.documentElement;\r\n\t\t\t    \t//TODO: Find parent for containment\r\n\t\t\t    \tthis.__objSelectedItem.containment = document.body;\r\n\t\t\t    \tthis.__itemPosition = this.__positionStarted(event,target,this.__objSelectedItem.scrollableContainer);\r\n\t\t\t\t    this.util.makeBodyUnselectable();\r\n\t\t\t\t    // remove text selection (Chrome, FF, Opera, Safari)\r\n\t\t\t\t    if (window.getSelection) \r\n\t\t\t\t    {\r\n\t\t\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// IE8\r\n\t\t\t\t\telse if (document.selection && document.selection.type === \"Text\") \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttry \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdocument.selection.empty();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tcatch (error) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t    if(!this.__config.enableCloneMode)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__compPlaceholder = this.__createPlaceholder(target);\r\n\t\t\t\t\t\tthis.__compPlaceholder = this.util.getWebComponentElement(this.__compPlaceholder);\r\n\t\t\t\t\t\tthis.util.insertAfterElement(target,this.__compPlaceholder);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.__divMovable = this.__cloneNode(target);\r\n\t\t\t\t\tthis.util.addStyleClass(target,this.__config.nodeDraggingClass);\r\n\t\t\t\t\tthis.__movePosition(event,this.__divMovable,this.__itemPosition,this.__objSelectedItem.containment,\"absolute\",this.__objSelectedItem.scrollableContainer);\r\n\t\t\t\t\t//adding offset to movable component if enableDragAfterHold is true so that users see that a clone has been created\r\n\t\t\t\t\tif(this.__config.enableDragAfterHold)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar rectMovable = this.__divMovable.getBoundingClientRect();\r\n\t\t\t\t\t\tthis.__divMovable.style.left = (rectMovable.left + 5) + \"px\";\r\n\t\t\t\t\t\tthis.__divMovable.style.top = (rectMovable.top + 5) + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.util.dispatchEvent(this.__config.container,this.DRAG_STARTED,target,{item:target});\r\n\t\t\t\t\t//assuming data has been set as this is last step before dragging starts\r\n\t\t\t\t\ttarget[\"nsObject\"][\"data\"] = this.util.cloneObject(this.__data);\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t \t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseMoveHandler = function(event)\r\n\t{\r\n\t\tif(this.__divMovable)\r\n\t\t{\r\n\t\t\tvar orignalNode = null;\r\n\t\t\tif(this.__divMovable[\"nsObject\"] && this.__divMovable[\"nsObject\"][\"orignalNode\"])\r\n\t\t\t{\r\n\t\t\t\torignalNode = this.__divMovable[\"nsObject\"][\"orignalNode\"];\r\n\t\t\t}\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tvar objTargetElement = this.__getTargetElementDetails(event,orignalNode);\r\n\t\t\tvar targetX = objTargetElement.x;\r\n\t\t    var targetY = objTargetElement.y;\r\n\t\t    var targetElement = objTargetElement.element;\r\n\t\t    if(this.__lastTarget)\r\n\t\t    {\r\n\t\t    \tthis.util.removeStyleClass(this.__lastTarget,this.__config.nodeDragHoverClass);\r\n\t\t    }\r\n\t\t    this.__movePosition(event,this.__divMovable,this.__itemPosition, this.__objSelectedItem.containment,\"absolute\",this.__objSelectedItem.scrollableContainer);\r\n\t\t    if(targetElement && targetElement[\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"] \r\n\t    \t\t&& targetElement[\"nsObject\"][\"parent\"][\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"][\"nsObject\"][\"isDroppable\"])\r\n\t\t    {\r\n\t\t    \tvar container = objTargetElement.parent;\r\n\t\t\t    var objTargetNSObject = targetElement[\"nsObject\"];\r\n\t\t\t    if(this.__config.enableCloneMode)\r\n\t\t\t    {\r\n\t\t\t    \tthis.util.addStyleClass(targetElement,this.__config.nodeDragHoverClass);\r\n\t\t\t    }\r\n\t\t\t    else\r\n\t\t\t    {\r\n\t\t\t    \tif (this.__lastTarget !== targetElement) \r\n\t\t\t    \t{\r\n\t\t\t    \t\tvar placeholderIndex = this.__getPlaceHolderIndex(container);\r\n\t\t\t\t        if (placeholderIndex < 0) \r\n\t\t\t\t        {\r\n\t\t\t\t        \tthis.__insertBefore(targetElement);\r\n\t\t\t\t        } \r\n\t\t\t\t        else \r\n\t\t\t\t        {\r\n\t\t\t\t        \tif (placeholderIndex <= objTargetNSObject.index) \r\n\t\t\t\t\t        {\r\n\t\t\t\t        \t\tthis.__insertAfter(targetElement);\r\n\t\t\t\t\t        } \r\n\t\t\t\t\t        else \r\n\t\t\t\t\t        {\r\n\t\t\t\t\t        \tthis.__insertBefore(targetElement);\r\n\t\t\t\t\t        }\r\n\t\t\t\t        }\r\n\t\t\t        }\r\n\t\t\t    }\r\n\t\t    }\r\n\t \t    var data = {node:orignalNode,x:targetX,y:targetY,targetNode:targetElement};\r\n\t \t    this.util.dispatchEvent(this.__config.container,this.DRAGGING,data,{item:data});\r\n\t\t    this.util.preventDefault(event);\r\n\t\t    this.__lastTarget = targetElement;\r\n\t\t    return false;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__documentMouseUpHandler = function(event)\r\n\t{\r\n\t\tthis.__removeDocumentListener();\r\n\t\tif(this.__divMovable)\r\n\t\t{\r\n\t\t\tvar orignalNode = null;\r\n\t\t\tvar nodeData = null;\r\n\t\t\tif(this.__divMovable[\"nsObject\"] && this.__divMovable[\"nsObject\"][\"orignalNode\"])\r\n\t\t\t{\r\n\t\t\t\torignalNode = this.__divMovable[\"nsObject\"][\"orignalNode\"];\r\n\t\t\t\tif(orignalNode && orignalNode[\"nsObject\"])\r\n\t\t\t\t{\r\n\t\t\t\t\tnodeData = orignalNode[\"nsObject\"][\"data\"];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tvar objTargetElement = null;\r\n\t\t\tvar isPlaceholder = false;\r\n\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t{\r\n\t\t\t\tobjTargetElement = this.__getTargetElementDetails(event,orignalNode);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tobjTargetElement = this.__getPlaceholderDetails(event);\r\n\t\t\t\tisPlaceholder = true;\r\n\t\t\t}\r\n\t\t\tvar targetX = objTargetElement.x;\r\n\t\t    var targetY = objTargetElement.y;\r\n\t\t    var hasElementChanged = false;\r\n\t\t    var targetElement = objTargetElement.element;\r\n\t\t    if(targetElement && (isPlaceholder || targetElement[\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"] \r\n\t\t\t\t&& targetElement[\"nsObject\"][\"parent\"][\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"][\"nsObject\"][\"isDroppable\"]))\r\n\t\t    {\r\n\t\t    \tvar container = objTargetElement.parent;\r\n\t\t    \tif(container && container.tagName.toLowerCase() === \"tbody\")\r\n\t\t    \t{\r\n\t\t    \t\tcontainer = this.util.findParent(container,\"table\");\r\n\t\t    \t}\r\n\t\t    \tvar objTargetNSObject = null;\r\n\t\t    \tvar targetIndex = -1;\r\n\t\t    \tif(this.__config.enableCloneMode)\r\n\t\t\t\t{\r\n\t\t    \t\tobjTargetNSObject = targetElement[\"nsObject\"];\r\n\t\t    \t\ttargetIndex = objTargetNSObject[\"index\"];\r\n\t\t\t\t}\r\n\t\t    \telse\r\n\t\t    \t{\r\n\t\t    \t\ttargetIndex = Array.prototype.indexOf.call(targetElement.parentNode.children,targetElement);\r\n\t\t    \t}\r\n\t\t    \tvar item = (nodeData ? nodeData : {});\r\n\t\t    \titem.targetNode = targetElement;\r\n\t\t    \titem.node = orignalNode;\r\n\t\t    \tif(container)\r\n\t\t    \t{\r\n\t\t    \t\tvar cancelled = this.util.dispatchEvent(container,this.ITEM_DROPPING,item,{item:item},true,true);\r\n\t\t\t \t\tif(!cancelled)\r\n\t\t\t \t\t{\r\n\t\t\t \t\t\tif(orignalNode === targetElement)\r\n\t\t\t \t\t\t{\r\n\t\t\t \t\t\t\thasElementChanged = false;\r\n\t\t\t \t\t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t \t\t\t\tconsole.debug(\"Item has not changed\");\r\n\t\t\t \t\t\t}\r\n\t\t\t \t\t    if(this.__isSameContainer(container))\r\n\t\t\t \t\t    {\r\n\t\t\t \t\t    \tif(orignalNode[\"nsObject\"][\"index\"] !== targetIndex)\r\n\t\t\t \t\t    \t{\r\n\t\t\t \t\t    \t\tthis.__moveNode(orignalNode,targetIndex,targetElement,nodeData);\r\n\t\t\t \t\t    \t\thasElementChanged = true;\r\n\t\t\t \t\t    \t}\r\n\t\t\t \t\t    }\r\n\t\t\t \t\t    else\r\n\t\t\t \t\t    {\r\n\t\t\t \t\t    \tthis.__removeNode(orignalNode,nodeData);\r\n\t\t\t \t\t    \tif(container[\"nsObject\"] && container[\"nsObject\"][\"insertNode\"])\r\n\t\t\t \t\t    \t{\r\n\t\t\t \t\t    \t\tcontainer[\"nsObject\"][\"insertNode\"](orignalNode,targetIndex,targetElement,nodeData);\r\n\t\t\t \t\t    \t}\r\n\t\t\t \t\t    \thasElementChanged = true;\r\n\t\t\t \t\t    }\r\n\t\t\t \t\t    this.util.dispatchEvent(container,this.ITEM_DROPPED,item,{item:item},true,false);\r\n\t\t\t \t\t}\r\n\t\t\t \t\telse\r\n\t\t\t\t\t{\r\n\t\t\t \t\t\thasElementChanged = false;\r\n\t\t\t \t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t\t\t\tconsole.debug(\"Item drop was cancelled\");\r\n\t\t\t\t\t}\r\n\t\t    \t}\r\n\t\t    \telse\r\n\t\t\t\t{\r\n\t\t\t    \thasElementChanged = false;\r\n\t\t\t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t\t\tconsole.debug(\"Item was dropped at invalid location\");\r\n\t\t\t\t}\r\n\t\t    }\r\n\t\t    else\r\n\t\t\t{\r\n\t\t    \thasElementChanged = false;\r\n\t\t\t\tthis.__animateInvalidDrop(orignalNode);\r\n\t\t\t\tconsole.debug(\"Item was dropped at invalid location\");\r\n\t\t\t}\r\n\t\t    if(hasElementChanged)\r\n\t\t    {\r\n\t\t    \tthis.__dragEndCleanUp();\r\n\t\t    }\r\n\t\t    this.util.dispatchEvent(this.__config.container,this.DRAG_END,orignalNode,{item:orignalNode},true,false);\r\n\t\t\tthis.util.preventDefault(event);\r\n\t\t    event.stopPropagation();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tthis.__dragEndCleanUp();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__dragStartPreventHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tthis.util.preventDefault(event);\r\n\t    event.stopPropagation();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__addDocumentListener = function() \r\n\t{\r\n\t\tif(!this.__documentMouseMoveRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseMoveRef = this.__documentMouseMoveHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mousemove\",this.__documentMouseMoveRef);\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseUpRef = this.__documentMouseUpHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mouseup\",this.__documentMouseUpRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__removeDocumentListener = function() \r\n\t{\r\n\t\tif(this.__documentMouseMoveRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mousemove\",this.__documentMouseMoveRef);\r\n\t\t\tthis.__documentMouseMoveRef = null;\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mouseup\",this.__documentMouseUpRef);\r\n\t\t\tthis.__documentMouseUpRef = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__addDocumentHoldListener = function() \r\n\t{\r\n\t\tif(!this.__documentMouseMoveHoldRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseMoveHoldRef = this.__documentMouseMoveHoldHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mousemove\",this.__documentMouseMoveHoldRef);\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpHoldRef)\r\n\t\t{\r\n\t\t\tthis.__documentMouseUpHoldRef = this.__documentMouseUpHoldHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"mouseup\",this.__documentMouseUpHoldRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__removeDocumentHoldListener = function() \r\n\t{\r\n\t\tif(this.__documentMouseMoveHoldRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mousemove\",this.__documentMouseMoveHoldRef);\r\n\t\t\tthis.__documentMouseMoveHoldRef = null;\r\n\t\t}\r\n\t\tif(!this.__documentMouseUpHoldRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"mouseup\",this.__documentMouseUpHoldRef);\r\n\t\t\tthis.__documentMouseUpHoldRef = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__animateInvalidDrop = function(orignalNode)\r\n\t{\r\n\t\tif(this.__divMovable && orignalNode)\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tvar transitionEndCallback = function()\r\n\t\t\t{\r\n\t\t\t\tself.util.removeStyleClass(self.__divMovable,\"nsAnimateGhost\");\r\n\t\t\t\tself.__dragEndCleanUp();\r\n\t\t\t\tself.__resetChildren();\r\n\t\t\t};\r\n\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(this.__divMovable,\"nsAnimateGhost\");\r\n\t\t\t\tvar transition = new this.util.transition(this.__divMovable,transitionEndCallback);\r\n\t\t    \tvar objSourceNSObject = orignalNode[\"nsObject\"];\r\n\t\t    \tthis.__divMovable.style.left = (objSourceNSObject.position.left) + \"px\";\r\n\t\t    \tthis.__divMovable.style.top = (objSourceNSObject.position.top ) + \"px\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\ttransitionEndCallback();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__resetChildren = function()\r\n\t{\r\n\t\tvar arrChildNode = this.__config.container.getElementsByTagName(this.__config.childNodeType);\r\n\t\tvar childNode = null;\r\n\t\tfor (var count = 0; count < arrChildNode.length; count++) \r\n\t\t{\r\n\t\t\tchildNode = arrChildNode[count];\r\n\t\t\tthis.util.removeStyleClass(childNode,this.__config.nodeDragHoverClass);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__clearHoldTime = function()\r\n\t{\r\n\t\tif(this.__holdTimeoutInterval > -1)\r\n\t\t{\r\n\t\t\tclearTimeout(this.__holdTimeoutInterval);\r\n\t\t}\r\n\t\tthis.__holdTimeoutInterval = -1;\r\n\t\tthis.__removeDocumentHoldListener();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__insertNode = function(node,index,currentElement,nodeData)\r\n\t{\r\n\t\tif(this.__config.insertNodeCallback)\r\n\t\t{\r\n\t\t\tthis.__config.insertNodeCallback(this.__config.container,node,index,currentElement,nodeData);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container;\r\n\t\t\tif(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t\t\t{\r\n\t\t\t\tcurrentElement.parentNode.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcontainer.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__initializeChildren();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__moveNode = function(node,index,currentElement,nodeData)\r\n\t{\r\n\t\tif(this.__config.moveNodeCallback)\r\n\t\t{\r\n\t\t\tthis.__config.moveNodeCallback(this.__config.container,node,index,currentElement,nodeData);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container;\r\n\t\t\tif(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t\t\t{\r\n\t\t\t\tcurrentElement.parentNode.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t//this.util.insertAfterElement(currentElement,node);\r\n\t\t\t\tcontainer.insertBefore(node,currentElement);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__initializeChildren();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__removeNode = function(node,nodeData)\r\n\t{\r\n\t\tif(this.__config.removeNodeCallback)\r\n\t\t{\r\n\t\t\tthis.__config.removeNodeCallback(this.__config.container,node,nodeData);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container;\r\n\t\t\tif(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t\t\t{\r\n\t\t\t\tnode.parentNode.removeChild(node);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t//if not clone mode then element is already removed\r\n\t\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontainer.removeChild(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__initializeChildren();\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getTargetElementDetails = function(event,orignalNode)\r\n\t{\r\n\t\tvar targetX = event.pageX - document.documentElement.scrollLeft;\r\n\t    var targetY = event.pageY - (window.pageYOffset || document.documentElement.scrollTop);\r\n\t    var targetElement = document.elementFromPoint(targetX, targetY);\r\n\t    var parent = null;\r\n\t    var childNodeType = null;\r\n\t    var arrElement = [];\r\n\t    var prevElement = null;\r\n\t    while(this.util.isElement(targetElement) && targetElement.tagName !== \"HTML\" && targetElement.tagName !== \"BODY\")\r\n\t    {\r\n\t    \tif(targetElement === prevElement)\r\n\t    \t{\r\n\t    \t\t//console.log(\"Stop\");\r\n\t    \t}\r\n\t    \tprevElement = targetElement;\r\n\t    \t//console.log(targetElement.tagName + \",\" + targetElement.textContent);\r\n\t    \tif(targetElement.tagName === this.__config.childNodeType)\r\n\t    \t{\r\n\t    \t\tchildNodeType = targetElement;\r\n\t    \t}\r\n\t    \telse if(this.__parentContainerType.toLowerCase() === \"table\")\r\n\t    \t{\r\n\t    \t\tchildNodeType = this.util.findParent(targetElement,this.__config.childNodeType);\r\n\t    \t\tif(!childNodeType)\r\n\t    \t\t{\r\n\t    \t\t\tchildNodeType = this.util.findChild(targetElement,this.__config.childNodeType);\r\n\t    \t\t}\r\n\t    \t}\r\n\t    \tchildNodeType = this.util.getWebComponentElement(childNodeType);\r\n\t    \tif(childNodeType && childNodeType !== orignalNode && childNodeType[\"nsObject\"] && childNodeType[\"nsObject\"][\"dropEnabled\"])\r\n\t    \t{\r\n\t    \t\ttargetElement = childNodeType;\r\n\t    \t\tbreak;\r\n\t    \t}\r\n\t    \tarrElement.push({element:targetElement,display:targetElement.style.display});\r\n\t    \ttargetElement.style.display = \"none\";//pointerEvents = \"none\";\r\n\t    \t\r\n\t    \ttargetElement = document.elementFromPoint(targetX, targetY);\r\n\t    }\r\n\t    for(var count = 0;count < arrElement.length;count++)\r\n\t    {\r\n\t    \tarrElement[count].element.style.display = arrElement[count].display;//pointerEvents = \"\";\r\n\t    }\r\n\t    if(!this.util.isElement(targetElement) || targetElement.tagName === \"HTML\")\r\n\t    {\r\n\t    \ttargetElement = null;\r\n\t    }\r\n\t    if(targetElement)\r\n\t    {\r\n\t        if(!this.util.hasStyleClass(targetElement,this.__config.nodeDraggingClass))\r\n\t    \t{\r\n\t        \t//if not child then check parent\r\n\t        \tvar tmpTarget = targetElement.querySelector(\".\" + this.__config.nodeDraggingClass);\r\n\t        \tif(!tmpTarget)\r\n\t        \t{\r\n\t        \t\ttmpTarget = this.util.findParentBySelector(targetElement,\".\" + this.__config.nodeDraggingClass);\r\n\t        \t}\r\n\t        \tif(tmpTarget)\r\n\t        \t{\r\n\t        \t\ttargetElement = tmpTarget;\r\n\t        \t}\r\n\t    \t}\r\n\t        if(targetElement[\"nsObject\"] && targetElement[\"nsObject\"][\"parent\"])\r\n\t    \t{\r\n\t        \tparent = targetElement[\"nsObject\"][\"parent\"];\r\n\t    \t}\r\n\t    }\r\n\t    return {element:targetElement,parent:parent,x:targetX,y:targetY};\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getPlaceholderDetails = function(event)\r\n\t{\r\n\t\tvar targetX = event.pageX - document.documentElement.scrollLeft;\r\n\t    var targetY = event.pageY - (window.pageYOffset || document.documentElement.scrollTop);\r\n\t\treturn {element:this.__compPlaceholder,parent:this.__compPlaceholder.parentNode,x:targetX,y:targetY};\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__cloneNode = function(node)\r\n\t{\r\n\t\tvar id = this.__getID();\r\n\t\tvar divMovable = this.util.createDiv(id + \"clonedItem\", \"nsDraggableCloneItem\");\r\n\t\tvar clonedNode = null;\r\n\t\tvar rectContainer = this.__config.container.getBoundingClientRect();\r\n\t\tif(this.__config.createCloneCallback)\r\n\t\t{\r\n\t\t\tvar containerConfiguration = {width:rectContainer.width,height:rectContainer.height};\r\n\t\t\tclonedNode = this.__config.createCloneCallback(node,containerConfiguration);\r\n\t\t\tclonedNode.setAttribute(\"id\",\"comp\" + id + \"ClonedNode\");\r\n\t\t\tdivMovable.appendChild(clonedNode);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar container = this.__config.container.cloneNode(false);\r\n\t\t\tcontainer.setAttribute(\"id\",\"comp\" + id + \"ClonedContainer\");\r\n\t\t\tif(this.__config.enableCloneMode)\r\n\t\t\t{\r\n\t\t\t\tclonedNode = node.cloneNode(true);\r\n\t\t\t\tclonedNode.setAttribute(\"id\",\"comp\" + id + \"ClonedNode\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tclonedNode = node;\r\n\t\t\t}\r\n\t\t\tcontainer.appendChild(clonedNode);\r\n\t\t\tcontainer.style.width = rectContainer.width + \"px\";\r\n\t\t\ttry\r\n\t\t\t{\r\n\t\t\t\tdivMovable.appendChild(container);\r\n\t\t\t}\r\n\t\t\tcatch(error)\r\n\t\t\t{\r\n\t\t\t\tthis.util.getWebComponentElement(divMovable).appendChild(container);\r\n\t\t\t\t//divMovable.appendChild(container);\r\n\t\t\t}\r\n\t\t}\r\n\t\tdocument.body.appendChild(divMovable);\r\n\t\tif (divMovable.setCapture) \r\n\t\t{\r\n\t\t\tdivMovable.setCapture();\r\n\t\t}\r\n\t\tif(node.nsObject)\r\n\t\t{\r\n\t\t\tvar objCloned = {};//this.util.cloneObject(node.nsObject);\r\n\t\t\tobjCloned.orignalNode = node;\r\n\t\t\tdivMovable.nsObject = objCloned;\r\n\t\t\tclonedNode.nsObject = objCloned;\r\n\t\t}\r\n\t\treturn divMovable;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__createPlaceholder = function(node) \r\n\t{\r\n\t\tvar placeHolder = null;\r\n\t\tif(this.__config.createPlaceholderCallback)\r\n\t\t{\r\n\t\t\tplaceHolder = this.__config.createPlaceholderCallback(node);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tplaceHolder = this.util.createElement(this.__config.childNodeType);\r\n\t\t\tplaceHolder.className  = node.className;\r\n\t\t\tthis.util.addStyleClass(placeHolder,\"nsDraggablePlaceholder\");\r\n\t\t\tvar rect = node.getBoundingClientRect();\r\n\t\t\tplaceHolder.style.width = rect.width + \"px\";\r\n\t\t\tplaceHolder.style.height = rect.height + \"px\";\r\n\t\t}\r\n\t\treturn placeHolder;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__isNodeDraggable = function(node) \r\n\t{\r\n\t\tvar retValue = true;\r\n\t\tif(node)\r\n\t\t{\r\n\t\t\tif(this.__config.nodeDraggableCallback)\r\n\t\t\t{\r\n\t\t\t\tretValue = this.__config.nodeDraggableCallback(node);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__isNodeDroppable = function(node) \r\n\t{\r\n\t\tvar retValue = true;\r\n\t\tif(node)\r\n\t\t{\r\n\t\t\tnode = this.util.findParent(node,this.__config.childNodeType);\r\n\t\t\tif(this.__config.nodeDroppableCallback)\r\n\t\t\t{\r\n\t\t\t\tretValue = this.__config.nodeDroppableCallback(node);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__insertBefore = function(targetElement) \r\n\t{\r\n\t\tif(this.__compPlaceholder && targetElement)\r\n\t\t{\r\n\t\t\t// Ensure the placeholder is visible in the target (unless it's a table row)\r\n\t\t    if (this.util.getStyleValue(this.__compPlaceholder,\"display\") !== 'table-row') \r\n\t\t    {\r\n\t\t    \tthis.__compPlaceholder.style.display = \"block\";\r\n\t\t    }\r\n\t\t    if(!this.__config.enableCloneMode)\r\n\t\t    {\r\n\t\t    \ttargetElement.parentNode.insertBefore(this.__compPlaceholder,targetElement);\r\n\t\t\t    //dragItemInfo.moveTo(targetScope.sortableScope, targetScope.index());\r\n\t\t    }\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__insertAfter = function(targetElement) \r\n\t{\r\n\t\tif(this.__compPlaceholder && targetElement)\r\n\t\t{\r\n\t\t\t// Ensure the placeholder is visible in the target (unless it's a table row)\r\n\t\t    if (this.util.getStyleValue(this.__compPlaceholder,\"display\") !== 'table-row') \r\n\t\t    {\r\n\t\t    \tthis.__compPlaceholder.style.display = \"block\";\r\n\t\t    }\r\n\t\t    if(!this.__config.enableCloneMode)\r\n\t\t    {\r\n\t\t    \tthis.util.insertAfterElement(targetElement,this.__compPlaceholder);\r\n\t\t    \t//dragItemInfo.moveTo(targetScope.sortableScope, targetScope.index() + 1);\r\n\t\t    }\r\n\t\t    \r\n\t\t}\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getPlaceHolderIndex = function(targetElement) \r\n\t{\r\n\t\tif(targetElement)\r\n\t\t{\r\n\t\t\tif(this.util.hasStyleClass(targetElement,\"nsDraggablePlaceholder\"))\r\n\t\t\t{\r\n\t\t\t\treturn 0;\r\n\t\t    }\r\n\t\t\tvar arrChildNode = targetElement.getElementsByTagName(this.__config.childNodeType);\r\n\t\t\tvar childNode = null;\r\n\t\t\tfor (var count = 0; count < arrChildNode.length; count++) \r\n\t\t\t{\r\n\t\t\t\tchildNode = arrChildNode[count];\r\n\t\t\t\tif(this.util.hasStyleClass(childNode,\"nsDraggablePlaceholder\"))\r\n\t\t\t\t{\r\n\t\t\t\t\treturn count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t    return -1;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__isSameContainer = function(container) \r\n\t{\r\n\t\tif(container && container.nsObject) \r\n\t\t{\r\n\t\t\treturn this.__config.container.nsObject[\"id\"] === container.nsObject[\"id\"];\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__dragEndCleanUp = function() \r\n\t{\r\n\t\tthis.util.makeBodySelectable();\r\n\t\tthis.__isDragging = false;\r\n\t\tif(this.__divMovable)\r\n\t\t{\r\n\t\t\tif(this.__divMovable[\"nsObject\"] && this.__divMovable[\"nsObject\"][\"orignalNode\"])\r\n\t\t\t{\r\n\t\t\t\tvar orignalNode = this.__divMovable[\"nsObject\"][\"orignalNode\"];\r\n\t\t\t\tthis.util.removeStyleClass(orignalNode,this.__config.nodeDragHoverClass);\r\n\t\t\t\tthis.util.removeStyleClass(orignalNode,this.__config.nodeDraggingClass);\r\n\t\t\t}\r\n\t\t\tthis.__divMovable.parentNode.removeChild(this.__divMovable);\r\n\t\t\tthis.__divMovable = null;\r\n\t\t}\r\n\t\tif(this.__lastTarget)\r\n\t    {\r\n\t    \tthis.util.removeStyleClass(this.__lastTarget,this.__config.nodeDragHoverClass);\r\n\t    \tthis.__lastTarget = null;\r\n\t    }\r\n\t\tif(this.__compPlaceholder)\r\n\t\t{\r\n\t\t\tthis.__compPlaceholder.parentNode.removeChild(this.__compPlaceholder);\r\n\t\t\tthis.__compPlaceholder = null;\r\n\t\t}\r\n\t\tthis.__itemPosition = null;\r\n\t\tthis.__objSelectedItem = {scrollableContainer:null,containment:null};\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getOffset = function(element,scrollableContainer) \r\n\t{\r\n\t\tvar boundingClientRect = element.getBoundingClientRect();\r\n\t    if (!scrollableContainer) \r\n\t    {\r\n\t    \tscrollableContainer = document.documentElement;\r\n\t    }\r\n\t    var retValue = { width: boundingClientRect.width || element.offsetWidth,\r\n\t    \theight: boundingClientRect.height || element.offsetHeight,\r\n\t    \ttop: boundingClientRect.top + (window.pageYOffset || scrollableContainer.scrollTop - scrollableContainer.offsetTop),\r\n\t    \tleft: boundingClientRect.left + (window.pageXOffset || scrollableContainer.scrollLeft - scrollableContainer.offsetLeft)\r\n\t    };\r\n\t    return retValue;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__positionStarted = function(event,target,scrollableContainer) \r\n\t{\r\n\t\tvar position = {};\r\n\t\tposition.offsetX = event.pageX - this.__getOffset(target, scrollableContainer).left;\r\n\t\tposition.offsetY = event.pageY - this.__getOffset(target, scrollableContainer).top;\r\n\t\tposition.startX = position.lastX = event.pageX;\r\n\t\tposition.startY = position.lastY = event.pageY;\r\n\t\tposition.nowX = position.nowY = position.distX = position.distY = position.dirAx = 0;\r\n\t\tposition.dirX = position.dirY = position.lastDirX = position.lastDirY = position.distAxX = position.distAxY = 0;\r\n\t    return position;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__calculatePosition = function(position,event) \r\n\t{\r\n\t\t position.lastX = position.nowX;\r\n\t     position.lastY = position.nowY;\r\n\t\r\n\t     // mouse position this events\r\n\t     position.nowX = event.pageX;\r\n\t     position.nowY = event.pageY;\r\n\t\r\n\t     // distance mouse moved between events\r\n\t     position.distX = position.nowX - position.lastX;\r\n\t     position.distY = position.nowY - position.lastY;\r\n\t\r\n\t     // direction mouse was moving\r\n\t     position.lastDirX = position.dirX;\r\n\t     position.lastDirY = position.dirY;\r\n\t\r\n\t     // direction mouse is now moving (on both axis)\r\n\t     position.dirX = position.distX === 0 ? 0 : position.distX > 0 ? 1 : -1;\r\n\t     position.dirY = position.distY === 0 ? 0 : position.distY > 0 ? 1 : -1;\r\n\t\r\n\t     // axis mouse is now moving on\r\n\t     var newAx = Math.abs(position.distX) > Math.abs(position.distY) ? 1 : 0;\r\n\t\r\n\t     // calc distance moved on this axis (and direction)\r\n\t     if (position.dirAx !== newAx) \r\n\t     {\r\n\t       position.distAxX = 0;\r\n\t       position.distAxY = 0;\r\n\t     } \r\n\t     else \r\n\t     {\r\n\t       position.distAxX += Math.abs(position.distX);\r\n\t       if (position.dirX !== 0 && position.dirX !== position.lastDirX) \r\n\t       {\r\n\t         position.distAxX = 0;\r\n\t       }\r\n\t\r\n\t       position.distAxY += Math.abs(position.distY);\r\n\t       if (position.dirY !== 0 && position.dirY !== position.lastDirY) \r\n\t       {\r\n\t         position.distAxY = 0;\r\n\t       }\r\n\t     }\r\n\t     position.dirAx = newAx;\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__movePosition = function(event,element,position,container,cssPosition,scrollableContainer) \r\n\t{\r\n\t\tvar bounds;\r\n\t    var useRelative = (cssPosition === 'relative');\r\n\t    element.x = event.pageX - position.offsetX;\r\n\t    element.y = event.pageY - position.offsetY;\r\n\t\r\n\t    if (container) \r\n\t    {\r\n\t      bounds = this.__getOffset(container, scrollableContainer);\r\n\t      if (useRelative) \r\n\t      {\r\n\t        // reduce positioning by bounds\r\n\t        element.x -= bounds.left;\r\n\t        element.y -= bounds.top;\r\n\t\r\n\t        // reset bounds\r\n\t        bounds.left = 0;\r\n\t        bounds.top = 0;\r\n\t      }\r\n\t\r\n\t      if (element.x < bounds.left) \r\n\t      {\r\n\t    \t  element.x = bounds.left;\r\n\t      } \r\n\t      else if (element.x >= bounds.width + bounds.left - this.__getOffset(element).width) \r\n\t      {\r\n\t    \t  element.x = bounds.width + bounds.left - this.__getOffset(element).width;\r\n\t      }\r\n\t      if (element.y < bounds.top) \r\n\t      {\r\n\t    \t  element.y = bounds.top;\r\n\t      } \r\n\t      else if (element.y >= bounds.height + bounds.top - this.__getOffset(element).height) \r\n\t      {\r\n\t    \t  element.y = bounds.height + bounds.top - this.__getOffset(element).height;\r\n\t      }\r\n\t    }\r\n\t    element.style.left = element.x + 'px';\r\n\t    element.style.top = element.y + 'px';\r\n\t    \r\n\t    this.__calculatePosition(position, event);\r\n\t};\r\n\t\r\n\tNSDragDrop.prototype.__getID = function()\r\n\t{\r\n\t\tif(!this.__id)\r\n\t\t{\r\n\t\t\tif(this.__config.container.hasAttribute(\"id\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.container.getAttribute(\"id\");\r\n\t\t\t}\r\n\t\t\telse if(this.__config.container.hasAttribute(\"name\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.container.getAttribute(\"name\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__id = \"comp\" + this.util.getUniqueId();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.__id;\r\n\t};\r\n\t\r\n\treturn NSDragDrop;\r\n})();\r\nnsModuleExport(this,\"NSDragDrop\",NSDragDrop);\"use strict\";\r\nvar NSFilter = (function()\r\n{\r\n\tfunction NSFilter(data,filter,setting,recordLimit,isHierarchical,childField,filterFunction,hierarchyFilterChildren,arrIgnoreKeysInCloneDataSource) \r\n\t{\r\n\t\tthis.EXACT = \"exact\";\r\n\t\tthis.STARTS_WITH = \"startsWith\";\r\n\t\tthis.ENDS_WITH = \"endsWith\";\r\n\t\tthis.CONTAINS = \"contains\";\r\n\t\t\r\n\t\tthis.IS_FOUND_FIELD = \"__nsFilter__found\";\r\n\t\t\r\n\t\tthis.util = new NSUtil();\r\n\t\tthis.__data = data;\r\n\t\tthis.__filter = filter;\r\n\t\tthis.__setting = setting;\r\n\t\tthis.__recordLimit = (parseInt(recordLimit) > 0) ? recordLimit : -1;\r\n\t\tthis.__isHierarchical = this.util.isUndefined(isHierarchical) ? false : Boolean.parse(isHierarchical);\r\n\t\tthis.__childField = childField ? childField : \"children\";\r\n\t\tthis.__filterFunction = filterFunction;\r\n\t\tthis.__hierarchyFilterChildren = hierarchyFilterChildren;\r\n\t\tthis.__arrIgnoreKeysInCloneDataSource = arrIgnoreKeysInCloneDataSource;\r\n\t\tthis.__ignoreSameLevelNode = true;\r\n\t}\r\n\t\r\n\tNSFilter.prototype.execute = function(data,filter,setting,recordLimit,isHierarchical,childField,filterFunction,hierarchyFilterChildren,arrIgnoreKeysInCloneDataSource) \r\n\t{ \r\n\t\tdata = data ? data : this.__data;\r\n\t\tfilter = filter ? filter : this.__filter;\r\n\t\tsetting = setting ? setting : this.__setting;\r\n\t\trecordLimit = (parseInt(recordLimit) > 0) ? recordLimit : this.__recordLimit;\r\n\t\tisHierarchical = this.util.isUndefined(isHierarchical) ? Boolean.parse(this.__isHierarchical) : Boolean.parse(isHierarchical);\r\n\t\tchildField = childField ? childField : this.__childField;\r\n\t\tfilterFunction = filterFunction ? filterFunction : this.__filterFunction;\r\n\t\thierarchyFilterChildren = hierarchyFilterChildren ? hierarchyFilterChildren : this.__hierarchyFilterChildren;\r\n\t\tarrIgnoreKeysInCloneDataSource = this.util.isUndefinedOrNull(arrIgnoreKeysInCloneDataSource) ? this.__arrIgnoreKeysInCloneDataSource : arrIgnoreKeysInCloneDataSource;\r\n\t\tif(data && filter)\r\n\t\t{\r\n\t\t\tvar dataSource = data.slice(0);\r\n\t\t\tvar arrFilter = [];\r\n\t\t\tvar self = this;\r\n\t\t\tvar callFilterFunction = function(source,level,parentItem)\r\n\t\t\t{\r\n\t\t\t\tvar arrReturn = [];\r\n\t\t\t\tfor (var count = 0; count < source.length; count++) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = source[count];\r\n\t\t\t\t\tvar found = false;\r\n\t\t\t\t\tif(isHierarchical && item[childField] && item[childField].length > 0 )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar arrChild = callFilterFunction(item[childField],level + 1,item);\r\n\t\t\t\t\t\tif(arrChild && arrChild.length > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\t\tif(self.__ignoreSameLevelNode)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t            item[childField] = arrChild;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tarrReturn.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(!found && self.__filterItem(item,filter,setting,isHierarchical,childField,parentItem,filterFunction))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(isHierarchical && hierarchyFilterChildren)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar arrChildren = item[childField];\r\n\t\t\t\t\t\t\tif(arrChildren && arrChildren.length > 0)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tvar childItem = null;\r\n\t\t\t\t\t\t\t\tvar childLength = arrChildren.length;\r\n\t\t\t\t\t\t\t\tfor(var childCount = childLength - 1;childCount > -1;childCount--)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tchildItem = arrChildren[childCount];\r\n\t\t\t\t\t\t\t\t\tif(childItem)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tif(!hierarchyFilterChildren(childItem,childCount,childItem[self.IS_FOUND_FIELD],filter,setting,item))\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tarrChildren.splice(childCount, 1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\tarrReturn.push(item);\r\n\t\t\t\t\t\tif(!isHierarchical && recordLimit > 0 && arrReturn.length >= recordLimit)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//return false;\r\n\t\t\t\treturn arrReturn;\r\n\t\t\t};\r\n\t\t\tvar callNonHierarchicalFilterFunction = function(source)\r\n\t\t\t{\r\n\t\t\t\tvar arrReturn = [];\r\n\t\t\t\tfor (var count = 0; count < source.length; count++) \r\n\t\t\t\t{\r\n\t\t\t\t\tvar item = source[count];\r\n\t\t\t\t\tif(self.__filterItemNonHierarchical(item,filter,setting,filterFunction))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarrReturn.push(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn arrReturn;\r\n\t\t\t};\r\n\t\t\tdataSource = this.util.cloneObject(dataSource,isHierarchical,[],arrIgnoreKeysInCloneDataSource);\r\n\t\t\tif(isHierarchical)\r\n\t\t\t{\r\n\t\t\t\tarrFilter = callFilterFunction(dataSource,1,null);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tarrFilter = callNonHierarchicalFilterFunction(dataSource);\r\n\t\t\t}\r\n\t\t\treturn arrFilter;\r\n\t\t}\r\n\t\treturn data;\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__filterItemNonHierarchical = function(item,filter,setting,filterFunction) \r\n\t{\r\n\t\tvar retValue = false;\r\n\t\tif(filterFunction)\r\n\t\t{\r\n\t\t\tretValue = filterFunction(item,filter,setting);\r\n\t\t\tthis.__setItem(item,retValue);\r\n\t\t\treturn retValue;\r\n\t\t}\r\n\t\telse if(filter instanceof Function) \r\n\t    {\r\n\t\t\tretValue = filter(item,setting);\r\n\t        this.__setItem(item,retValue);\r\n\t        return retValue;\r\n\t    }\r\n\t    else if(filter instanceof Array) \r\n\t    {\r\n\t        for (var count = 0; count < filter.length; ++count) \r\n\t        {\r\n\t            if (this.__filterItemNonHierarchical(item,filter[count],setting,filterFunction))\r\n\t            {\r\n\t            \tthis.__setItem(item,true);\r\n\t            \treturn true;\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    }\r\n\t    else if(setting.type === \"date\" && filter)\r\n\t    {\r\n\t        return this.__filterDate(item,filter,setting);\r\n\t    }\r\n\t    else if(typeof(item) === \"string\" && filter)\r\n\t    {\r\n\t        return this.__filterString(item,filter,setting);\r\n\t    }\r\n\t    else if (item === item + 0 && filter)\r\n\t    {\r\n\t        return this.__filterNumeric(item,filter);\r\n\t    }\r\n\t    else if(typeof (filter) === \"object\") \r\n\t    {\r\n\t        for(var key in filter) \r\n\t        {\r\n\t        \tvar tempSetting = {};\r\n\t        \tif(setting && setting[key])\r\n\t        \t{\r\n\t        \t\ttempSetting = setting[key];\r\n\t        \t}\r\n\t            if(!this.__filterItemNonHierarchical(item[key],filter[key],tempSetting,filterFunction))\r\n\t            {\r\n\t            \treturn false;\r\n\t            }\r\n\t        }\r\n\t        this.__setItem(item,true);\r\n\t        return true;\r\n\t    }\r\n\t\tretValue = (filter == item);\r\n\t    this.__setItem(item,retValue);\r\n\t    return retValue;\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__filterItem = function(item,filter,setting,isHierarchical,childField,parentItem,filterFunction) \r\n\t{\r\n\t\tvar retValue = false;\r\n\t\tif(filterFunction)\r\n\t\t{\r\n\t\t\tretValue = filterFunction(item,filter,setting,isHierarchical,childField,parentItem);\r\n\t\t\tthis.__setItem(item,retValue);\r\n\t\t\treturn retValue;\r\n\t\t}\r\n\t\telse if(filter instanceof Function) \r\n\t    {\r\n\t\t\tretValue = filter(item,setting);\r\n\t        this.__setItem(item,retValue);\r\n\t        return retValue;\r\n\t    }\r\n\t    else if(filter instanceof Array) \r\n\t    {\r\n\t        for (var count = 0; count < filter.length; ++count) \r\n\t        {\r\n\t            if (this.__filterItem(item,filter[count],setting,isHierarchical,childField,parentItem,filterFunction))\r\n\t            {\r\n\t            \tthis.__setItem(item,true);\r\n\t            \treturn true;\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    }\r\n\t    else if(setting.type === \"date\" && filter)\r\n\t    {\r\n\t        return this.__filterDate(item,filter,setting);\r\n\t    }\r\n\t    else if(typeof(item) === \"string\" && filter)\r\n\t    {\r\n\t        return this.__filterString(item,filter,setting);\r\n\t    }\r\n\t    else if (item === item + 0 && filter)\r\n\t    {\r\n\t        return this.__filterNumeric(item,filter);\r\n\t    }\r\n\t    else if(typeof (filter) === \"object\") \r\n\t    {\r\n\t        for(var key in filter) \r\n\t        {\r\n\t        \tif(isHierarchical && key === childField)\r\n\t        \t{\r\n\t        \t\tcontinue;\r\n\t        \t}\r\n\t        \tvar tempSetting = {};\r\n\t        \tif(setting && setting[key])\r\n\t        \t{\r\n\t        \t\ttempSetting = setting[key];\r\n\t        \t}\r\n\t            if(!this.__filterItem(item[key],filter[key],tempSetting,isHierarchical,childField,parentItem,filterFunction))\r\n\t            {\r\n\t            \treturn false;\r\n\t            }\r\n\t        }\r\n\t        this.__setItem(item,true);\r\n\t        return true;\r\n\t    }\r\n\t\tretValue = (filter == item);\r\n\t    this.__setItem(item,retValue);\r\n\t    return retValue;\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__setItem = function(item,isFound)\r\n\t{\r\n\t\tif(item && typeof (item) === \"object\" && isFound)\r\n\t\t{\r\n\t\t\titem[this.IS_FOUND_FIELD] = true;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__filterNumeric= function(value,searchParam)\r\n\t{\r\n\t\tvar retValue = false;\r\n\t\tvalue = parseFloat(value);\r\n\t\tif(!isNaN(value))\r\n\t\t{\r\n\t\t\tif(/<=/.test(searchParam)) // first checks if there is an operator (<,>,<=,>=)\r\n\t\t\t{\r\n\t\t\t\tretValue = (value <= parseFloat(searchParam.replace(/<=/,\"\")));\r\n\t\t\t}\r\n\t\t\telse if(/>=/.test(searchParam))\r\n\t\t\t{\r\n\t\t\t\tretValue = (value >= parseFloat(searchParam.replace(/>=/,\"\")));\r\n\t\t\t}\r\n\t\t\telse if(/</.test(searchParam))\r\n\t\t\t{\r\n\t\t\t\tretValue = (value < parseFloat(searchParam.replace(/</,\"\")));\r\n\t\t\t}\r\n\t\t\telse if(/>/.test(searchParam))\r\n\t\t\t{\r\n\t\t\t\tretValue = (value > parseFloat(searchParam.replace(/>/,\"\")));\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tretValue = (value === parseFloat(searchParam));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__filterDate= function(value,searchParam,setting)\r\n\t{\r\n\t\tvar retValue = false;\r\n\t\tvar self = this;\r\n\t\tvar matchValue = function(compareValue,opt)\r\n\t\t{\r\n\t\t\tvar compValue = false;\r\n\t\t\tif(self.util.isUndefinedOrNull(value))\r\n\t\t\t{\r\n\t\t\t\tcompValue = false;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar newVal = self.__getDate(value,setting.cellFormat);\r\n\t\t\t\tif(newVal)\r\n\t\t\t\t{\r\n\t\t\t\t\tnewVal.setHours(0, 0, 0, 0);\r\n\t\t\t\t\tcompareValue.setHours(0, 0, 0, 0);\r\n\t\t\t\t\tswitch(opt)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcase \"equals\":\r\n\t\t\t\t\t\t\tif (compareValue.getTime() === newVal.getTime()) \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcompValue = true;\r\n\t\t\t\t            }\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"greaterThan\":\r\n\t\t\t\t\t\t\tif (compareValue.getTime() < newVal.getTime()) \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcompValue = true;\r\n\t\t\t\t            }\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"lessThan\":\r\n\t\t\t\t\t\t\tif (compareValue.getTime() > newVal.getTime()) \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcompValue = true;\r\n\t\t\t\t            }\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"notEqual\":\r\n\t\t\t\t\t\t\tif (compareValue.getTime() != newVal.getTime()) \r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcompValue = true;\r\n\t\t\t\t            }\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tself.util.warning(\"NSFilter\",value + \" cannot be converted to date Object for given cell format\");\r\n\t\t\t\t\tcompValue = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn compValue;\r\n\t\t};\r\n\t\tvar processDate = function(date,type)\r\n\t\t{\r\n\t\t\tvar compValue = false;\r\n\t\t\tif(date && matchType1)\r\n\t\t\t{\r\n\t\t\t\tif(!date || !Object.prototype.toString.call(date) === '[object Date]')\r\n\t\t\t\t{\r\n\t\t\t\t\tcompValue = true;\r\n\t\t\t\t}\r\n\t\t\t\telse if(setting.comparator)\r\n\t\t\t\t{\r\n\t\t\t\t\tcompValue = setting.comparator(value,date,setting);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tcompValue = matchValue(date,type);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn compValue;\r\n\t\t};\r\n\t\tif(setting.matchType1 || setting.matchType2)\r\n\t\t{\r\n\t\t\tvar matchType1 = setting.matchType1;\r\n\t\t\tvar firstDate = setting.firstDate;\r\n\t\t\tvar operation = setting.operation;\r\n\t\t\tvar matchType2 = setting.matchType2;\r\n\t\t\tvar secondDate = setting.secondDate;\r\n\t\t\tif(this.util.isUndefinedOrNull(value))\r\n\t\t\t{\r\n\t\t\t\tretValue = false;\r\n\t\t\t}\r\n\t\t\telse if(firstDate && secondDate && matchType1 && matchType2 && operation)\r\n\t\t\t{\r\n\t\t\t\tvar firstVal = processDate(firstDate,matchType1);\r\n\t\t\t\tvar secondVal = processDate(secondDate,matchType2);\r\n\t\t\t\tswitch(operation)\r\n\t\t\t\t{\r\n\t\t\t\t\tcase \"and\":\r\n\t\t\t\t\t\tretValue = (firstVal && secondVal);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"or\":\r\n\t\t\t\t\t\tretValue = (firstVal || secondVal);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(firstDate && matchType1)\r\n\t\t\t{\r\n\t\t\t\tretValue = processDate(firstDate,matchType1);\r\n\t\t\t}\r\n\t\t\telse if(secondDate && matchType2)\r\n\t\t\t{\r\n\t\t\t\tretValue = processDate(secondDate,matchType2);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tretValue = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(!searchParam || !Object.prototype.toString.call(searchParam) === '[object Date]')\r\n\t\t\t{\r\n\t\t\t\tretValue = true;\r\n\t\t\t}\r\n\t\t\telse if(setting.comparator)\r\n\t\t\t{\r\n\t\t\t\tretValue = setting.comparator(value,searchParam,setting);\r\n\t\t\t}\r\n\t\t\telse if(this.util.isUndefinedOrNull(value))\r\n\t\t\t{\r\n\t\t\t\tretValue = false;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tretValue = matchValue(searchParam,\"equals\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn retValue;\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__filterString= function(value,searchParam,setting)\r\n\t{\r\n\t\tvar regExp = null;\r\n\t\tvar regExpModifier = \"g\";\r\n\t\tvar startWithChar = \"(^)\";\r\n\t\tvar endsWithChar = \"($)\";\r\n\t\tvar searchString = \"\";\r\n\t\tvar isCaseSensitive = false;\r\n\t\tvar isMultiline = false;\r\n\t\tvar matchType = this.CONTAINS;\r\n\t\tif(setting)\r\n\t\t{\r\n\t\t\tisCaseSensitive = Boolean.parse(setting[\"caseSensitive\"]);\r\n\t\t\tisMultiline = Boolean.parse(setting[\"multiline\"]);\r\n\t\t\tmatchType = setting[\"matchType\"] ? setting[\"matchType\"] : matchType;\r\n\t\t}\r\n\t\tif(!isCaseSensitive)\r\n\t\t{\r\n\t\t\tregExpModifier += \"i\";\r\n\t\t}\r\n\t\tif(isMultiline)\r\n\t\t{\r\n\t\t\tregExpModifier += \"m\";\r\n\t\t}\r\n\t\tsearchParam = this.__removeSpecialCharacter(searchParam);\r\n\t\tif(matchType === this.EXACT)\r\n\t\t{\r\n\t\t\tsearchString = startWithChar + searchParam + endsWithChar;\r\n\t\t}\r\n\t\telse if(matchType === this.STARTS_WITH)\r\n\t\t{\r\n\t\t\tsearchString = startWithChar + searchParam;\r\n\t\t}\r\n\t\telse if(matchType === this.ENDS_WITH)\r\n\t\t{\r\n\t\t\tsearchString = searchParam + endsWithChar;\r\n\t\t}\r\n\t\telse \r\n\t\t{\r\n\t\t\tsearchString = searchParam;\r\n\t\t}\r\n\t\tregExp = new RegExp(searchString,regExpModifier);\r\n\t\treturn regExp.test(value);\r\n\t};\r\n\t\r\n\tNSFilter.prototype.__removeSpecialCharacter = function(text)\r\n\t{\r\n\t\tfunction replaceEscape(char)\r\n\t\t{\r\n\t\t\tif(text)\r\n\t\t\t{\r\n\t\t\t\tvar exp = new RegExp(\"\\\\\" + char,\"g\");\r\n\t\t\t\ttext = text.replace(exp,\"\\\\\" + char);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar specialChar = ['\\\\','[','^','$','.','|','?','*','+','(',')'];\r\n\t\tfor(var count = 0;count < specialChar.length;count++) \r\n\t\t{\r\n\t\t\treplaceEscape(specialChar[count]);\r\n\t\t}\r\n\t\treturn text;\r\n\t};\r\n\t\r\n\t//ref from : https://stackoverflow.com/questions/7445328/check-if-a-string-is-a-date-value\r\n\tNSFilter.prototype.__getDate = function(value,arrFormat) \r\n\t{\r\n\t\tif(value)\r\n\t\t{\r\n\t\t\tvar dateFormat;\r\n\t\t    if (Object.prototype.toString.call(value) === '[object Date]') \r\n\t\t    {\r\n\t\t        return value;\r\n\t\t    }\r\n\t\t    if(arrFormat)\r\n\t\t    {\r\n\t\t    \tvar dateUtil = new NSDateUtil();\r\n\t\t    \tif(!this.util.isArray(arrFormat))\r\n\t\t    \t{\r\n\t\t    \t\tarrFormat = [arrFormat];\r\n\t\t    \t}\r\n\t\t    \tfor(var count = 0;count < arrFormat.length;count++)\r\n\t\t    \t{\r\n\t\t    \t\tvar format = arrFormat[count];\r\n\t\t    \t\tvar date = dateUtil.parseString(value,format);\r\n\t\t    \t\tif(date)\r\n\t\t    \t\t{\r\n\t\t    \t\t\treturn date;\r\n\t\t    \t\t}\r\n\t\t    \t}\r\n\t\t    }\r\n\t\t    else\r\n\t\t    {\r\n\t\t    \tif (typeof value.replace === 'function') \r\n\t\t\t    {\r\n\t\t\t        value.replace(/^\\s+|\\s+$/gm, '');\r\n\t\t\t    }\r\n\t\t\t    dateFormat = /(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?=[012])\\d:[0-5])\\d\\s*[ap]m)?$/;\r\n\t\t\t    if(dateFormat.test(value))\r\n\t\t\t    {\r\n\t\t\t    \treturn new Date(value);//Date.parse(value);\r\n\t\t\t    }\r\n\t\t    }\r\n\t\t}\r\n\t    return null;\r\n\t};\r\n\t\r\n\treturn NSFilter;\r\n})();\r\nnsModuleExport(this,\"NSFilter\",NSFilter); \"use strict\"; \r\nvar NSMenu = (function()\r\n{\r\n\tfunction NSMenu(setting) \r\n\t{\r\n\t\tthis.util = new NSUtil();\r\n\t\tthis.DEFAULT_POSITION = this.util.POS_BOTTOMRIGHT;\r\n\t\t\r\n\t\tthis.__setting = setting;\r\n\t\tthis.__config = null;\r\n\t\t\r\n\t\tthis.__id = null;\r\n\t\tthis.__popUp = null;\r\n\t\tthis.__nsPopUp = null;\r\n\t\tthis.__fieldItem = null;\r\n\t\tthis.__fieldItemChild = null;\r\n\t\tthis.__fieldChild = \"children\";\r\n\t\tthis.__isInternalCall = false;\r\n\t\tthis.__suppressDocumentHandler = false;\r\n\t\t\r\n\t\tthis.__documentClickRef = null;\r\n\t\tthis.__documentKeyUpRef = null;\r\n\t\tthis.__lastSelectedTarget = null;\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t}\r\n\t\r\n\tNSMenu.prototype.create = function (dataSource) \r\n\t{ \r\n\t\tif(dataSource && (this.__config.createRunTime || this.__isInternalCall))\r\n\t\t{\r\n\t\t\tif(this.__popUp)\r\n\t\t\t{\r\n\t\t\t\tthis.remove();\r\n\t\t\t}\r\n\t\t\tthis.__isInternalCall = false;\r\n\t\t\tthis.__config.dataSource = dataSource;\r\n\t\t\tthis.__popUp = this.__createElement(true,this.__config.dataSource);\r\n\t\t\tthis.util.addStyleClass(this.__nsPopUp,\"nsMainMenu\");\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.remove = function () \r\n\t{ \r\n\t\tif(this.__config.createRunTime || this.__isInternalCall)\r\n\t\t{\r\n\t\t\tthis.__isInternalCall = false;\r\n\t\t\tthis.__nsPopUp.remove();\r\n\t\t\tthis.__popUp = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.show = function (event) \r\n\t{ \r\n\t\tevent = this.util.getEvent(event);\r\n\t\tthis.__nsPopUp.hideOtherNSPopUp();\r\n\t\tif(this.__config.createRunTime)\r\n\t\t{\r\n\t\t\tthis.__isInternalCall = true;\r\n\t\t\tvar dataSource = null;\r\n\t\t\tif(this.__config.sourceProvider)\r\n\t\t\t{\r\n\t\t\t\tdataSource = this.__config.sourceProvider(this.__lastSelectedTarget);\r\n\t\t\t}\r\n\t\t\tif(dataSource && dataSource.length > 0)\r\n\t\t\t{\r\n\t\t\t\tthis.create(dataSource);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.util.preventDefault(event);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__nsPopUp.show();\r\n\t\tthis.__nsPopUp.placePopUp(event);\r\n\t\tif(!this.__documentClickRef)\r\n\t\t{\r\n\t\t\tthis.__documentClickRef = this.__documentClickHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document.documentElement,\"click\", this.__documentClickRef);\r\n\t\t}\r\n\t\tif(!this.__documentKeyUpRef)\r\n\t\t{\r\n\t\t\tthis.__documentKeyUpRef = this.__documentKeyUpHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document.documentElement,\"keyup\", this.__documentKeyUpRef);\r\n\t\t}\r\n\t\tthis.util.preventDefault(event);\r\n\t};\r\n\tNSMenu.prototype.hide = function() \r\n\t{\r\n\t\tthis.__lastSelectedTarget = null;\r\n\t\tthis.__hideAllSubMenus();\r\n\t\tif(this.__config.createRunTime)\r\n\t\t{\r\n\t\t\tthis.__isInternalCall = true;\r\n\t\t\tthis.remove();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__nsPopUp.hide();\r\n\t\t}\r\n\t\tif(this.__documentClickRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document.documentElement,\"click\", this.__documentClickRef, false);\r\n\t\t\tthis.__documentClickRef = null;\r\n\t\t}\r\n\t\tif(this.__documentKeyUpRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document.documentElement,\"keyup\", this.__documentKeyUpRef, false);\r\n\t\t\tthis.__documentKeyUpRef = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__initialize = function ()\r\n\t{\r\n\t\tif(this.__setting)\r\n\t\t{\r\n\t\t\t//eventHandler:extra eventHandler which developer wants to execute on the event i.e. click,customEvent etc\r\n\t\t\tthis.__config = {\r\n\t\t\t\t\tparent: this.__setting[\"parent\"] || null,\r\n\t\t\t\t\tdataSource: this.__setting[\"dataSource\"] || null,\r\n\t\t\t\t\tisContextMenu: (this.util.isUndefined(this.__setting[\"isContextMenu\"]) || this.__setting[\"isContextMenu\"] === null) ? true : Boolean.parse(this.__setting[\"isContextMenu\"]),\r\n\t\t\t\t\teventType: this.__setting[\"eventType\"] || \"click\",\r\n\t\t\t\t\tcreateRunTime: (this.util.isUndefined(this.__setting[\"createRunTime\"]) || this.__setting[\"createRunTime\"] === null) ? false : Boolean.parse(this.__setting[\"createRunTime\"]),\r\n\t\t\t\t\tsourceProvider: this.__setting[\"sourceProvider\"] || null,\r\n\t\t\t\t\ttargetType: this.__setting[\"targetType\"] || null,\r\n\t\t\t\t\tdefaultHandler: (this.__setting[\"defaultHandler\"] ? this.util.getFunction(this.__setting[\"defaultHandler\"]) : null),\r\n\t\t\t\t\teventHandler: (this.__setting[\"eventHandler\"] ? this.util.getFunction(this.__setting[\"eventHandler\"]) : null),\r\n\t\t\t\t\tposition: this.__setting[\"position\"] || this.DEFAULT_POSITION,\r\n\t\t\t\t\twidth: parseInt(this.__setting[\"width\"]) || -1\r\n\t\t\t\t};\r\n\t\t\tif(this.__config.parent)\r\n\t\t\t{\r\n\t\t\t\tvar popUpSetting = {id:this.__getID() + \"menu\",type:\"ul\",width:this.__config.width,position:this.__config.position};\r\n\t\t\t\tthis.__nsPopUp = new this.util.nsPopUp(popUpSetting);\r\n\t\t\t\tthis.__fieldItem = this.__getID() + \"_item\";\r\n\t\t\t\tthis.__fieldItemChild = this.__getID() + \"_child\";\r\n\t\t\t\tif(!this.__config.createRunTime)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__isInternalCall = true;\r\n\t\t\t\t\tthis.create(this.__config.dataSource);\r\n\t\t\t\t}\r\n\t\t\t\tif(this.__config.isContextMenu)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.addEvent(this.__config.parent,\"contextmenu\", this.__parentContextMenuHandler.bind(this));\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.addEvent(this.__config.parent,this.__config.eventType, this.__parentClickHandler.bind(this),false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__createElement = function(isRoot,dataSource) \r\n\t{\r\n\t\tvar parentNode = null;\r\n\t\tif(dataSource && dataSource.length > 0)\r\n\t\t{\r\n\t\t\tif(isRoot)\r\n\t\t\t{\r\n\t\t\t\tparentNode = this.__nsPopUp.create();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tparentNode = document.createElement(\"ul\"); \r\n\t\t\t\tthis.util.addStyleClass(parentNode,\"nsMenu\");\r\n\t\t\t\tif(this.__config.width > -1)\r\n\t\t\t\t{\r\n\t\t\t\t\tparentNode.style.width = this.__config.width + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor (var count = 0; count < dataSource.length; count++) \r\n\t\t\t{\r\n\t\t\t\tvar item = dataSource[count];\r\n\t\t\t\tthis.__createItem(item,parentNode);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn parentNode;\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__createItem = function(item,parent)\r\n\t{\r\n\t\tvar menuItem = null;\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\tmenuItem = document.createElement(\"li\");\r\n\t\t\tthis.util.addStyleClass(menuItem,\"nsMenuItem\");\r\n\t\t\tif(item[\"header\"])\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(menuItem,\"nsHeader\");\r\n\t\t\t}\r\n\t\t\tif(item[\"disabled\"])\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(menuItem,\"nsDisabled\");\r\n\t\t\t}\r\n\t\t\tvar button = document.createElement(\"BUTTON\");\r\n\t\t\tthis.util.addStyleClass(button,\"nsMenuButton\");\r\n\t\t\tif(item[\"iconHTML\"])\r\n\t\t\t{\r\n\t\t\t\tvar spanIcon = document.createElement(\"span\");\r\n\t\t\t\tthis.util.addStyleClass(spanIcon,\"nsMenuAlign\");\r\n\t\t\t\tspanIcon.innerHTML = item[\"iconHTML\"];\r\n\t\t\t\tbutton.appendChild(spanIcon);\r\n\t\t\t}\r\n\t\t\tvar spanText = document.createElement(\"span\");\r\n\t\t\tthis.util.addStyleClass(spanText,\"nsMenuText\");\r\n\t\t\tspanText.appendChild(document.createTextNode(item[\"title\"]));\r\n\t\t\tbutton.appendChild(spanText);\r\n\t\t\tmenuItem.appendChild(button);\r\n\t\t\tthis.util.addEvent(menuItem,\"click\",this.__itemClickHandler.bind(this));\r\n\t\t\tthis.util.addEvent(menuItem,\"mouseenter\",this.__itemMouseOverHandler.bind(this));\r\n\t\t\tthis.util.addEvent(menuItem,\"mouseleave\",this.__itemMouseOutHandler.bind(this));\r\n\t\t\tif(item[this.__fieldChild]) \r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(menuItem,\"nsSubMenu\");\r\n\t\t    \tvar subMenu = this.__createElement(false,item[this.__fieldChild]);\r\n\t\t    \tif(subMenu)\r\n\t\t    \t{\r\n\t\t    \t\tthis.util.addStyleClass(subMenu,\"nsSubMenuContainer\");\r\n\t\t\t    \tmenuItem.appendChild(subMenu);\r\n\t\t\t    \titem[this.__fieldItemChild] = subMenu;\r\n\t\t\t    \tmenuItem.setAttribute(\"hasChild\",true);\r\n\t\t    \t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tmenuItem.setAttribute(\"hasChild\",false);\r\n\t\t\t}\r\n\t\t\tif(parent)\r\n\t\t\t{\r\n\t\t\t\tparent.appendChild(menuItem);\r\n\t\t\t\tif(item[\"separatorBelow\"])\r\n\t\t\t\t{\r\n\t\t\t\t\tvar lineMenuItem = document.createElement(\"li\");\r\n\t\t\t\t\tthis.util.addStyleClass(lineMenuItem,\"nsMenuSeparator\");\r\n\t\t\t\t\tparent.appendChild(lineMenuItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\titem[this.__fieldItem] = menuItem;\r\n\t\t}\r\n\t\treturn menuItem;\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__itemClickHandler = function(event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tvar target = this.util.getTarget(event);\r\n\t\ttarget = this.util.findParent(target,\"LI\");\r\n\t\tvar item = this.__getItem(target,this.__config.dataSource);\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\tvar handler = null;\r\n\t\t\tif(item[\"handler\"])\r\n\t\t\t{\r\n\t\t\t\thandler = this.util.getFunction(item[\"handler\"]);\r\n\t\t\t}\r\n\t\t\tif(!handler)\r\n\t\t\t{\r\n\t\t\t\thandler = this.__config.defaultHandler;\r\n\t\t\t}\r\n\t\t\tif(handler)\r\n\t\t\t{\r\n\t\t\t\thandler(this.__lastSelectedTarget,item);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.hide();\r\n\t\tevent.stopImmediatePropagation();\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__itemMouseOverHandler = function(event) \r\n\t{\r\n\t\tvar target = this.util.getTarget(event);\r\n\t\ttarget = this.util.findParent(target,\"LI\");\r\n\t\tif(target.getAttribute(\"hasChild\") === \"true\")\r\n\t\t{\r\n\t\t\tvar item = this.__getItem(target,this.__config.dataSource);\r\n\t\t\tif(item && item[this.__fieldItemChild])\r\n\t\t\t{\r\n\t\t\t\tvar childMenu = item[this.__fieldItemChild];\r\n\t\t\t\tthis.util.addStyleClass(childMenu,\"nsShowMenu\");\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__itemMouseOutHandler = function(event) \r\n\t{\r\n\t\tvar target = this.util.getTarget(event);\r\n\t\ttarget = this.util.findParent(target,\"LI\");\r\n\t\tif(target.getAttribute(\"hasChild\") === \"true\")\r\n\t\t{\r\n\t\t\tvar item = this.__getItem(target,this.__config.dataSource);\r\n\t\t\tif(item && item[this.__fieldItemChild])\r\n\t\t\t{\r\n\t\t\t\tvar childMenu = item[this.__fieldItemChild];\r\n\t\t\t\tthis.util.removeStyleClass(childMenu,\"nsShowMenu\");\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__documentClickHandler = function(event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\t/*if(!this.__config.isContextMenu && this.__isParentPresent(event.target,this.__config.parent))\r\n\t\t{\r\n\t\t\treturn;\r\n\t\t}*/\r\n\t\t//commenting this so that menu closes on click in Grid\r\n\t\t/*if(this.__suppressDocumentHandler)\r\n\t\t{\r\n\t\t\tthis.__suppressDocumentHandler = false;\r\n\t\t\treturn;\r\n\t\t}*/\r\n\t\tthis.hide();\r\n\t};\r\n\t\r\n\t\r\n\tNSMenu.prototype.__documentKeyUpHandler = function(event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tif(event.keyCode === this.util.KEYCODE.ESC) \r\n\t\t{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__parentContextMenuHandler = function(event)\r\n\t{\r\n\t\tif(this.__config.eventHandler)\r\n\t\t{\r\n\t\t\tthis.__config.eventHandler(event);\r\n\t\t}\r\n\t\tthis.__setLastSelectedTarget(this.util.getTarget(event));\r\n\t\tthis.show(event);\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__parentClickHandler = function(event)\r\n\t{\r\n\t\tif(this.__config.eventHandler)\r\n\t\t{\r\n\t\t\tthis.__config.eventHandler(event);\r\n\t\t}\r\n\t\tthis.__setLastSelectedTarget(this.util.getTarget(event));\r\n\t\t//below condition to make documentClickhandler aware that do not hide the menu,hence put only for click handler\r\n\t\tif(this.__config.eventType === \"click\")\r\n\t\t{\r\n\t\t\tthis.__suppressDocumentHandler = true;\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t\tthis.show(event);\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__getItem = function(objItem,dataSource)\r\n\t{\r\n\t\tif(objItem)\r\n\t\t{\r\n\t\t\tfor (var count = 0; count < dataSource.length; count++) \r\n\t\t\t{\r\n\t\t\t\tvar item = dataSource[count];\r\n\t\t\t\tif(item[this.__fieldItem] == objItem)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn item;\r\n\t\t\t\t}\r\n\t\t\t\tif(item.hasOwnProperty(this.__fieldChild))\r\n\t\t\t\t{\r\n\t\t\t\t\tvar childItem = this.__getItem(objItem,item[this.__fieldChild]);\r\n\t\t\t\t\tif(childItem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn childItem;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__hideAllSubMenus = function()\r\n\t{\r\n\t\tvar arrSubMenus = this.__popUp.querySelectorAll(\"ul\");\r\n\t\tif(arrSubMenus && arrSubMenus.length > 0)\r\n\t\t{\r\n\t\t\tvar subMenu = null;\r\n\t\t\tfor(var count = 0;count < arrSubMenus.length;count++)\r\n\t\t\t{\r\n\t\t\t\tsubMenu = arrSubMenus[count];\r\n\t\t\t\tthis.util.removeStyleClass(subMenu,\"nsShowMenu\");\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__setLastSelectedTarget = function(target)\r\n\t{\r\n\t\tif(target && this.__config.targetType)\r\n\t\t{\r\n\t\t\ttarget = this.util.findParent(target,this.__config.targetType);\r\n\t\t}\r\n\t\tthis.__lastSelectedTarget = target;\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__getID = function()\r\n\t{\r\n\t\tif(!this.__id)\r\n\t\t{\r\n\t\t\tif(this.__config.parent.hasAttribute(\"id\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.parent.getAttribute(\"id\");\r\n\t\t\t}\r\n\t\t\telse if(this.__config.parent.hasAttribute(\"name\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__id = this.__config.parent.getAttribute(\"name\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__id = \"comp\" + this.util.getUniqueId();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.__id;\r\n\t};\r\n\t\r\n\tNSMenu.prototype.__isParentPresent =  function(node,parentNode) \r\n\t{\r\n\t\twhile (node && node!== document.body)\r\n\t\t{\r\n\t\t\tif(node.id === parentNode.id) \r\n\t\t\t{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\tnode = node.parentNode;\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\treturn NSMenu;\r\n})();\r\nnsModuleExport(this,\"NSMenu\",NSMenu); \"use strict\";\r\nvar NSVirtualScroll = (function()\r\n{\r\n\tfunction NSVirtualScroll(setting) \r\n\t{\r\n\t\tthis.__setting = setting;\r\n\t\tthis.util = null;\r\n\t\tthis.__config = null;\r\n\t\tthis.__internal = {};\r\n\t\tthis.__objProp = {};\r\n\t\tthis.__objSelectedProp = {};\r\n\t\tthis.__domVariables = null;\r\n\t\tthis.__doc = null;\r\n\t\tthis.__win = null;\r\n\t\tthis.__scrollHandlerRef = null;\r\n\t\tthis.__resizeHandlerRef = null;\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t}\r\n\t\r\n\tNSVirtualScroll.prototype.dataSource = function(paramItems)\r\n\t{\r\n\t\tif(!this.util.isUndefinedOrNull(paramItems))\r\n\t\t{\r\n\t\t\tvar reInit = false;\r\n\t\t\tif(!this.__internal.itemDimension)\r\n\t\t\t{\r\n\t\t\t\treInit = true;\r\n\t\t\t}\r\n\t\t\tif(this.util.isNumber(paramItems))\r\n\t\t\t{\r\n\t\t\t\tthis.__config.totalLength = parseInt(paramItems);\r\n\t\t\t}\r\n\t\t\telse if(this.util.isArray(paramItems))\r\n\t\t\t{\r\n\t\t\t\tthis.__config.items = paramItems;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__config.totalLength = null;\r\n\t\t\t\tthis.__config.items = [paramItems];\r\n\t\t\t}\r\n            this.__internal.objItemComp = {};\r\n            this.__internal.arrItem = [];\r\n\t\t\tif(reInit)\r\n\t\t\t{\r\n                var item = this.__getItemAt(0);\r\n\t\t\t\tthis.__internal.isItemHtml = this.util.isString(item);\r\n\t\t\t\tthis.__setSize();\r\n\t\t\t}\r\n\t\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\t\tvar scrollPos = scrollElement[this.__objSelectedProp.scroll];\r\n\t\t\tif(this.__internal.items && (this.__internal.items.length * this.__internal.itemDimension < scrollPos)) \r\n\t\t\t{\r\n\t\t\t\tscrollElement[this.__objSelectedProp.scroll] = 0;\r\n\t\t\t\tthis.__internal.lastPageNum = 0;\r\n\t\t    }\r\n\t\t\tthis.__addItems();\r\n\t\t\tscrollElement[this.__objSelectedProp.scroll] = scrollPos;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.refresh = function(isReset)\r\n\t{\r\n\t\tvar currItemSize = this.__internal.itemDimension;\r\n\t\tthis.__setSize();\r\n\t\tvar newItemSize = this.__internal.itemDimension;\r\n\t\tif((currItemSize != newItemSize) || isReset)\r\n\t\t{\r\n\t\t\tvar criteria = null;\r\n\t\t\tif(this.__config.totalLength)\r\n\t\t\t{\r\n\t\t\t\tcriteria = this.__config.totalLength;\r\n\t\t\t}\r\n\t\t\telse if(this.util.isArray(this.__config.items) && this.__config.items && this.__config.items.length)\r\n\t\t\t{\r\n\t\t\t\tcriteria = this.__config.items;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tcriteria = 0;\r\n\t\t\t}\r\n\t\t\tthis.dataSource(criteria);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.getScrollProgress = function()\r\n\t{\r\n\t\tvar scrollPos = this.__internal.scrollPos;\r\n\t\tvar itemSize = this.__internal.itemDimension;\r\n\t\tvar totalSize = this.__internal.arrItem.length * itemSize;\r\n\t\tvar progress = ((scrollPos / totalSize) * 100) || 0;\r\n\t\treturn progress;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.appendItems = function(arrItem)\r\n\t{\r\n\t\tthis.__addNewItems(arrItem,false);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.prependItems = function(arrItem)\r\n\t{\r\n\t\tthis.__addNewItems(arrItem,true);\r\n\t};\r\n\t\r\n\t//assuming that size of all rows are same\r\n\t//if not same add offset\r\n\t//if variable Row size and utility user has original scroll Position then set scrollPosition and pass index as null\r\n\tNSVirtualScroll.prototype.scrollToIndex = function(index,animationRequired,offset,scrollPosition)\r\n\t{\r\n\t\tvar arrItem = this.__internal.arrItem;\r\n\t\tif(arrItem && arrItem.length)\r\n\t\t{\r\n\t\t\tvar scrollPos = null;\r\n\t\t\tif(!this.util.isUndefinedOrNull(index) && index > -1 && index < arrItem.length)\r\n\t\t\t{\r\n\t\t\t\toffset = this.util.isUndefinedOrNull(offset) ? 0 : parseInt(offset);\r\n\t\t\t\tscrollPos = (this.__internal.itemDimension * index) + offset;\r\n\t\t\t}\r\n\t\t\telse if(!this.util.isUndefinedOrNull(scrollPosition))\r\n\t\t\t{\r\n\t\t\t\toffset = 0;\r\n\t\t\t\tscrollPos = scrollPosition;\r\n\t\t\t}\r\n\t\t\tif(!this.util.isUndefinedOrNull(scrollPos))\r\n\t\t\t{\r\n\t\t\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\t\t\tif(animationRequired)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar animation = new this.util.animation(scrollElement,[\r\n\t\t       \t  \t    {\r\n\t\t       \t  \t      time: 500,\r\n\t\t       \t  \t      property:this.__objSelectedProp.scroll,\r\n\t\t       \t  \t      target: scrollPos,\r\n\t\t       \t  \t    }\r\n\t\t       \t  \t]);\r\n\t\t   \t  \t  \tanimation.animate();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tscrollElement[this.__objSelectedProp.scroll] = scrollPos;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t//this function is used for updating items(dom elements) already generated \r\n\tNSVirtualScroll.prototype.updateItems = function(updateCallback) \r\n\t{\r\n\t\tif(this.__internal.arrItem && this.__internal.arrItem.length && updateCallback) \r\n\t\t{\r\n\t\t\tvar arrItem = this.__internal.arrItem;\r\n\t\t\tfor(var count = 0;count < arrItem.length;count++) \r\n\t\t\t{\r\n\t\t\t\tvar item = arrItem[count]; \r\n\t\t\t\titem = updateCallback(item);\r\n\t\t\t\tarrItem[count] = item;\r\n\t\t\t}\r\n\t\t\tthis.__internal.arrItem = arrItem;\r\n\t\t\tthis.__internal.origArrItem = this.__internal.arrItem;\r\n\t\t}\r\n\t}\r\n\t\r\n\tNSVirtualScroll.prototype.destroy = function()\r\n\t{\r\n\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tif(this.__internal.contentTabIndex)\r\n\t\t{\r\n\t\t\tcontentElement.setAttribute(\"tabindex\",this.__internal.contentTabIndex);\r\n\t\t}\r\n\t\tthis.util.removeStyleClass(scrollElement,\"nsVirtualScrollElement nsVirtualScrollElement\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tthis.util.removeStyleClass(contentElement,\"nsVirtualScrollContent nsVirtualScrollContent\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tif(this.__scrollHandlerRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(scrollElement,\"scroll\",this.__scrollHandlerRef);\r\n\t\t\tthis.__scrollHandlerRef = null;\r\n\t\t}\r\n\t\tif(this.__resizeHandlerRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(this.__win,\"resize\",this.__resizeHandlerRef);\r\n\t\t\tthis.__resizeHandlerRef = null;\r\n\t\t}\r\n\t\tif(this.__internal.divLoader)\r\n\t\t{\r\n\t\t\tthis.__internal.divLoader.parentNode.removeChild(this.__internal.divLoader);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__initialize = function()\r\n\t{\r\n\t\tthis.util = new NSUtil();\r\n\t\tif(this.__setting)\r\n\t\t{\r\n\t\t\tthis.__config = {\r\n\t\t\t\t\tscrollElement: this.util.getElement(this.__setting[\"scrollElement\"]),\r\n\t\t\t\t\tcontentElement: this.util.getElement(this.__setting[\"contentElement\"]),\r\n\t\t\t\t\tdirection: this.__setting[\"direction\"] || NSVirtualScroll.DIRECTION_VERTICAL,\r\n\t\t\t\t\titemTag: this.__setting[\"itemTag\"],\r\n\t\t\t\t\tpageSize: parseInt(this.__setting[\"pageSize\"]) || 30,//number of items after the cache will be refreshed\r\n\t\t\t\t\tpagesRendered: parseInt(this.__setting[\"pagesRendered\"]) || 3,//number of items(pageSize * pagesRendered) to be rendered\r\n\t\t\t\t\titems: this.__setting[\"items\"],//array of items, can be html or nodes\r\n\t\t\t\t\ttotalLength: parseInt(this.__setting[\"totalLength\"]) || 0,//either mention items or totalLength and itemCreateCallback\r\n\t\t\t\t\tgetItemComponent: this.__setting[\"getItemComponent\"],\r\n\t\t\t\t\tgetEmptyItemComponent: this.__setting[\"getEmptyItemComponent\"],\r\n\t\t\t\t\tenableScrollDelay: Boolean.parse(this.__setting[\"enableScrollDelay\"]),//for Mobile device which are slow in rendering\r\n\t\t\t\t\tscrollInterval: this.__setting[\"scrollInterval\"],\r\n\t\t\t\t\tenableLoader: Boolean.parse(this.__setting[\"enableLoader\"]),\r\n\t\t\t\t\tgetLoaderComponent: this.__setting[\"getLoaderComponent\"],\r\n\t\t\t\t\tresizeInterval: parseInt(this.__setting[\"resizeInterval\"]) || 150,\r\n\t\t\t\t\tscrollingProgress: this.__setting[\"scrollingProgress\"], //scrollingProgress callback while scrolling like  scrollingProgress(progress)\r\n\t\t\t\t\tpageWillChange: this.__setting[\"pageWillChange\"], //pageWillChange callback before page change like  pageWillChange(oldPage,newPage)\r\n\t\t\t\t\tpageChanged: this.__setting[\"pageChanged\"], //pageChanged callback before page change like  pageChanged(page)\r\n\t\t\t\t};\r\n\t\t\tif(!this.__config.scrollElement)\r\n\t\t\t{\r\n\t\t\t\tthis.util.throwNSError(\"NSVirtualScroll\",\"scrollElement is not valid\");\r\n\t\t\t}\r\n\t\t\tif(!this.__config.contentElement)\r\n\t\t\t{\r\n\t\t\t\tthis.util.throwNSError(\"NSVirtualScroll\",\"contentElement is not valid\");\r\n\t\t\t}\r\n\t\t\tthis.__domVariables = this.util.getDomVariables();\r\n\t\t\tthis.__doc = this.__domVariables.doc;\r\n\t\t\tthis.__win = this.__domVariables.win;\r\n\t\t\tif((!this.__config.items || this.__config.items.length == 0) && !this.__config.totalLength)\r\n\t\t\t{\r\n\t\t\t\tthis.__config.items = this.__fetchChildren(contentElement);\r\n\t\t\t}\r\n\t\t\tthis.__setProps();\r\n\t\t\tthis.__setInternalVars();\r\n\t\t\tthis.__create();\r\n\t\t\tthis.__addListeners();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setProps = function()\r\n\t{\r\n\t\tthis.__objProp = {\r\n\t\t\t    vertical: {\r\n\t\t\t        direction:NSVirtualScroll.DIRECTION_VERTICAL,size: \"height\",offset: \"offsetHeight\",\r\n\t\t\t        scroll: \"scrollTop\", scrollSize: \"scrollHeight\",paddingStart:\"paddingTop\",\r\n\t\t\t        paddingEnd:\"paddingBottom\",marginStart:\"marginTop\",marginEnd:\"marginBottom\"\r\n\t\t\t    },\r\n\t\t\t    horizontal: {\r\n\t\t\t        direction:NSVirtualScroll.DIRECTION_HORIZONTAL,size: \"width\",offset: \"offsetWidth\",\r\n\t\t\t        scroll: \"scrollLeft\", scrollSize: \"scrollWidth\",paddingStart:\"paddingLeft\",\r\n\t\t\t        paddingEnd:\"paddingRight\",marginStart:\"marginLeft\",marginEnd:\"marginRight\"\r\n\t\t\t    }\r\n\t\t};\r\n\t\tthis.__objSelectedProp = this.__objProp[\"vertical\"];\r\n\t\tif(this.__config.direction == NSVirtualScroll.DIRECTION_HORIZONTAL)\r\n\t\t{\r\n\t\t\tthis.__objSelectedProp = this.__objProp[\"horizontal\"];\r\n\t\t}\r\n\t};\r\n\t\r\n\t//call this function only with init is needed\r\n\tNSVirtualScroll.prototype.__setInternalVars = function()\r\n\t{\r\n\t\tif(!this.__internal.itemDimension)\r\n\t\t{\r\n\t\t\tif(this.__config.contentElement.hasAttribute(\"tabindex\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__internal.contentTabIndex = this.__config.contentElement.getAttribute(\"tabindex\");\r\n\t\t\t}\r\n\t\t\tthis.__internal.scrollIntervalID = -1;\r\n\t\t\tthis.__internal.resizeIntervalID = -1;\r\n\t\t\tthis.__internal.scrollPos = -1;\r\n\t\t\tthis.__internal.lastPageNum = -1;\r\n\t\t\tthis.__internal.objItemComp = {};\r\n\t\t\tthis.__internal.objCache = {};\r\n\t\t\tthis.__internal.cssExtraItem = \"nsVirtualExtraItem\" + this.util.toCamelCase(this.__objSelectedProp.direction,true);\r\n\t\t\tthis.__internal.isMobile = this.util.isMobile().any;\r\n\t\t\tif(this.__config.enableScrollDelay && this.util.isUndefinedOrNull(this.__config.scrollInterval))\r\n\t\t\t{\r\n\t\t\t\tthis.__config.scrollInterval = this.__internal.isMobile ? 300 : 0;\r\n\t\t\t}\r\n\t\t\tthis.__internal.divLoader = null;\r\n\t\t\tthis.__addLoader();\r\n\t\t\tthis.__internal.pageSize = this.__config.pageSize;\r\n\t\t\tthis.__internal.pagesRendered = this.__config.pagesRendered;\r\n\t\t\tvar item = this.__getItemAt(0);\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tthis.__internal.isItemHtml = this.util.isString(item);\r\n\t\t\t\tthis.__setSize();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__internal.itemDimension = 0;\r\n\t\t\t\tthis.__internal.pageDimension = 0;\r\n\t\t\t\tthis.__internal.itemsRendered = 0;\r\n\t\t\t\tthis.__internal.renderedSize = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setSize = function()\r\n\t{\r\n\t\tthis.__internal.itemDimension = this.__getItemSize();\r\n\t\tthis.__internal.pageDimension = this.__internal.itemDimension * this.__internal.pageSize;\r\n\t\tthis.__internal.itemsRendered = this.__internal.pageSize * this.__internal.pagesRendered;\r\n\t\tthis.__internal.renderedSize = this.__internal.pagesRendered * this.__internal.pageDimension;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__create = function()\r\n\t{\r\n\t\tvar scrollElement = this.__config.scrollElement;\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tthis.util.addStyleClass(scrollElement,\"nsVirtualScrollElement nsVirtualScrollElement\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tthis.util.addStyleClass(contentElement,\"nsVirtualScrollContent nsVirtualScrollContent\" + this.util.toCamelCase(this.__config.direction,true));\r\n\t\tcontentElement.setAttribute(\"tabindex\",0);\r\n\t\tif((this.__config.items && this.__config.items.length) || this.__config.totalLength)\r\n\t\t{\r\n\t\t\tvar scrollPos = scrollElement[this.__objSelectedProp.scroll];\r\n\t\t\tthis.__addItems();\r\n\t\t\tscrollElement[this.__objSelectedProp.scroll] = scrollPos;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__addListeners = function()\r\n\t{\r\n\t\tif(!this.__scrollHandlerRef)\r\n\t\t{\r\n\t\t\tthis.__scrollHandlerRef = this.__config.enableScrollDelay ? this.__scrollHandlerWithDelay.bind(this) : this.__scrollHandler.bind(this);\r\n\t\t\tthis.util.addEvent(this.__config.scrollElement,\"scroll\",this.__scrollHandlerRef);\r\n\t\t}\r\n\t\tif(!this.__resizeHandlerRef)\r\n\t\t{\r\n\t\t\tthis.__resizeHandlerRef = this.__resizeHandler.bind(this);\r\n\t\t\tthis.util.addEvent(this.__win,\"resize\",this.__resizeHandlerRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__scrollHandlerWithDelay = function(event)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tclearTimeout(this.__internal.scrollIntervalID);\r\n\t\tthis.__internal.scrollIntervalID = setTimeout(function(){\r\n\t\t\tself.__scrollHandler.call(self,event);\r\n\t\t},this.__config.scrollInterval);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__scrollHandler = function(event)\r\n\t{\r\n\t\tthis.__internal.scrollIntervalID = -1;\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tvar pageNumber = this.__getCurrentPageNum();\r\n\t\tvar lastPageNum = this.__internal.lastPageNum;\r\n\t\tthis.__internal.lastPageNum = pageNumber;\r\n\t\t/*console.log(\"lastPageNum::\" + lastPageNum + \" pageNumber::\" + pageNumber);*/\r\n\t\tif(lastPageNum != pageNumber)\r\n\t\t{\r\n\t\t\t//console.log(\"In Scroll\");\r\n\t\t\tthis.__addItems();\r\n\t\t\tthis.__fireCallback(\"scrollingProgress\",this.getScrollProgress());\r\n\t\t}\r\n\t};\r\n\t\r\n\t//not used for now\r\n\tNSVirtualScroll.prototype.__isScrollingDown = function() {\r\n\t\t  var isScrollingDown = false;\r\n\t\t  var currentScrollPos = this.__config.scrollElement[this.__objSelectedProp.scroll];\r\n\r\n\t\t  if (currentScrollPos > this.__internal.prevScrollPos) {\r\n\t\t    isScrollingDown = true;\r\n\t\t  } else {\r\n\t\t    isScrollingDown = false;\r\n\t\t  }\r\n\r\n\t\t  this.__internal.prevScrollPos = currentScrollPos;\r\n\t\t  return isScrollingDown;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__resizeHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tclearTimeout(this.__internal.resizeIntervalID);\r\n\t\tvar self = this;\r\n\t\tthis.__internal.resizeIntervalID = setTimeout(self.refresh.bind(self), this.__config.resizeInterval);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getItemSize = function()\r\n\t{\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tvar isAdded = false;\r\n\t\tvar size = null;\r\n\t\tif(!contentElement.children.length)\r\n\t\t{\r\n            var itemHtml = this.__getItemAt(0);\r\n\t\t\tthis.__setItemsInDom(itemHtml);\r\n\t\t\tisAdded = true;\r\n\t\t}\r\n\t\tvar item = null;\r\n\t\tvar length = contentElement.children.length;\r\n\t\tfor(var count = 0;count < length;count++)\r\n\t\t{\r\n\t\t\titem = contentElement.children[count];\r\n\t\t\tif(!this.util.hasStyleClass(item,this.__internal.cssExtraItem))\r\n\t\t\t{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(!this.__config.itemTag)\r\n\t\t{\r\n\t\t\tthis.__config.itemTag = item.tagName.toLowerCase();\r\n\t\t}\r\n\t\tsize = item[this.__objSelectedProp.offset];\r\n\t\tif(this.__config.itemTag == \"tr\")\r\n\t\t{\r\n\t\t\tvar border = this.util.getStyleValue(contentElement,\"borderCollapse\");\r\n\t\t\tif(border != \"collapse\")\r\n\t\t\t{\r\n\t\t\t\tvar borderSpacing = this.util.getStyleValue(contentElement,\"borderSpacing\");\r\n\t\t\t\tsize += this.__getInt(borderSpacing);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar marginStart = this.util.getStyleValue(item,this.__objSelectedProp.marginStart);\r\n\t        var marginEnd = this.util.getStyleValue(item,this.__objSelectedProp.marginEnd);\r\n\t        marginStart = this.__getInt(marginStart);\r\n\t        marginEnd = this.__getInt(marginEnd);\r\n\t        size += Math.max(marginStart, marginEnd);\r\n\t\t}\r\n\t\tif(isAdded)\r\n\t\t{\r\n\t\t\tthis.__setItemsInDom(null);\r\n\t\t}\r\n\t\treturn size;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__addItems = function()\r\n\t{\r\n\t\tvar arrItem = this.__internal.arrItem || [];\r\n\t\tvar itemPage = this.__getPageData(arrItem,this.__getCurrentPageNum());\r\n\t\tvar hasPageContentChanged = this.__hasCacheChanged(\"data\",itemPage.arrItem);\r\n        var hasStartOffsetChanged = this.__hasCacheChanged(\"top\",itemPage.startOffset);\r\n        var hasEndOffsetChanged = this.__hasCacheChanged(\"bottom\",itemPage.endOffset);\r\n        var contentElement = this.__config.contentElement;\r\n        var arrSource = [];\r\n        if(hasPageContentChanged || hasStartOffsetChanged) \r\n        {\r\n            if(itemPage.startOffset) \r\n            {\r\n            \tarrSource.push(this.__getExtraItem(\"nsVirtualTopItem\",itemPage.startOffset));\r\n            }\r\n            arrSource.push.apply(arrSource,itemPage.arrItem);\r\n            if(itemPage.endOffset) \r\n            {\r\n            \tarrSource.push(this.__getExtraItem(\"nsVirtualBottomItem\",itemPage.endOffset));\r\n            }\r\n            this.__fireCallback(\"pageWillChange\",[this.__internal.currentItemPage,itemPage]);\r\n            this.__setItemsInDom(arrSource);\r\n            this.__handleTagAfterRender(itemPage);\r\n            this.__fireCallback(\"pageChanged\",[itemPage]);\r\n            this.__internal.currentItemPage = itemPage;\r\n        } \r\n        else if(hasEndOffsetChanged) \r\n        {\r\n        \tcontentElement.lastChild.style[this.__objSelectedProp.size] = itemPage.endOffset + \"px\";\r\n        }\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setItemsInDom = function(arrItem,isAdd)\r\n\t{\r\n\t\tthis.__setLoaderVisibility(true);\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tif(this.__internal.isItemHtml)\r\n\t\t{\r\n\t\t\tif(arrItem)\r\n\t\t\t{\r\n\t\t\t\tvar html = this.__convertArrayToString(arrItem);\r\n\t\t\t\tisAdd ? contentElement.innerHTML += html : contentElement.innerHTML = html;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tisAdd ? null : contentElement.innerHTML = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(!isAdd)\r\n\t\t\t{\r\n\t\t\t\t//IE Bug that when Html elements are added(i.e. when this.__internal.isItemHtml is false) you do contentElement.innerHTML = \"\" \r\n\t\t\t\t//then the items being rendered in this.__internal.arrItem also becomes empty\r\n\t\t\t\tif(this.__internal.isItemHtml)\r\n\t\t\t\t{\r\n\t\t\t\t\tcontentElement.innerHTML = \"\";\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\twhile(contentElement.firstChild) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontentElement.removeChild(contentElement.lastChild);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(arrItem)\r\n\t\t\t{\r\n\t\t\t\tarrItem = this.util.isArray(arrItem) ? arrItem : [arrItem];\r\n\t\t\t\tvar item = null;\r\n\t\t\t\tvar length = arrItem.length;\r\n\t\t\t\tfor(var count =0;count < length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(arrItem[count]) {\r\n\t\t\t\t\t\titem = arrItem[count];\r\n\t\t\t\t\t\tthis.util.isString(item) ? contentElement.innerHTML += item : contentElement.appendChild(item);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__setLoaderVisibility(false);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getAllItems = function(fromIndex,toIndex)\r\n\t{\r\n\t\tif(this.__config.items && this.__config.items.length && this.__config.items.length > fromIndex)\r\n\t\t{\r\n            toIndex = this.__config.items.length > toIndex ? toIndex : this.__config.items.length - 1;\r\n            var arrCloned = this.__config.items.slice();\r\n\t\t\tvar arrItem = arrCloned.splice(fromIndex,toIndex - fromIndex);\r\n\t\t\treturn arrItem;\r\n\t\t}\r\n\t\telse if(this.__config.totalLength && this.__config.getItemComponent)\r\n\t\t{\r\n            fromIndex = this.__config.totalLength > fromIndex ? fromIndex : this.__config.totalLength - 1;\r\n            toIndex = this.__config.totalLength > toIndex ? toIndex : this.__config.totalLength - 1;\r\n            if(!this.__internal.arrItem) {\r\n\t\t\t\tthis.__internal.arrItem = [];\r\n\t\t\t}\r\n\t\t\tvar arrItem = this.__internal.arrItem;\r\n            var arrRet = [];\r\n\t\t\tfor(var count = fromIndex;count < toIndex + 1;count++)\r\n\t\t\t{\r\n                if(arrItem.length > count && arrItem[count]) {\r\n                    arrRet.push(arrItem[count]);\r\n                }\r\n                else {\r\n                    var item = this.__getItemFromComponent(count);\r\n                    arrItem[count] = item;\r\n                    arrRet.push(item);\r\n                }\r\n\t\t\t}\r\n\t\t\treturn arrRet;\r\n\t\t}\r\n\t\treturn [];\r\n\t};\r\n\r\n    NSVirtualScroll.prototype.__getItemAt = function(index) \r\n    {\r\n        if(this.__config.items && this.__config.items.length && this.__config.items.length > index)\r\n\t\t{\r\n           return this.__config.items[index];\r\n\t\t}\r\n        else if(this.__config.arrItem && this.__config.arrItem.length && this.__config.arrItem.length > index && this.__config.arrItem[index])\r\n\t\t{\r\n           return this.__config.arrItem[index];\r\n\t\t}\r\n        else if(this.__config.totalLength > index && this.__config.getItemComponent) {\r\n           return this.__getItemFromComponent(index);\r\n        }\r\n        return null;\r\n    };\r\n\t\r\n\tNSVirtualScroll.prototype.__getItemFromComponent = function(index)\r\n\t{\r\n\t\tvar item = null;\r\n\t\tif(this.__config.totalLength > index)\r\n\t\t{\r\n\t\t\tvar comp = new this.__config.getItemComponent(index);\r\n\t\t\titem = comp.getElement();\r\n\t\t\tthis.__internal.objItemComp[index.toString()] = comp;\r\n\t\t}\r\n\t\treturn item;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getPageData = function(arrItem,pageNum)\r\n\t{\r\n\t\tvar internal = this.__internal;\r\n\t\tvar retItem = null;\r\n        if(this.__config.totalLength === 0)\r\n\t\t{\r\n\t\t\tretItem = {startOffset: 0,endOffset: 0,itemsBefore: 0,arrItem:[this.__getEmptyItem()]};\r\n\t\t}\r\n\t\t/*else if(arrItem.length < internal.pageSize)\r\n\t\t{\r\n            var startIndex = 0;\r\n\t        var endIndex = internal.pageSize;\r\n            var arrRet = this.__getAllItems(startIndex,endIndex);\r\n\t\t\tretItem = {startOffset: 0,endOffset: 0,itemsBefore: 0,arrItem:arrRet};\r\n\t\t}*/\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar startIndex = Math.max((internal.itemsRendered - internal.pageSize) * pageNum, 0);\r\n\t        var endIndex = startIndex + internal.itemsRendered;\r\n            var totalLength = this.__getTotalLength();\r\n\t        var startOffset = Math.max(startIndex * internal.itemDimension, 0);\r\n\t        var endOffset = Math.max((totalLength - endIndex) * internal.itemDimension, 0);\r\n\t        var itemsBefore = startIndex;\r\n\t        if(startOffset < 1) \r\n\t        {\r\n\t        \titemsBefore++;\r\n\t        }\r\n\t        var arrRet = this.__getAllItems(startIndex,endIndex);//arrItem.slice(startIndex,endIndex);\r\n\t        retItem = {startOffset: startOffset,endOffset: endOffset,itemsBefore: itemsBefore,arrItem:arrRet};\r\n\t\t}\r\n\t\tconsole.log(retItem);\r\n\t\treturn retItem;\r\n\t};\r\n\r\n    NSVirtualScroll.prototype.__getTotalLength = function() \r\n    {\r\n        if(this.__config.items && this.__config.items.length)\r\n\t\t{\r\n           return this.__config.items.length;\r\n\t\t}\r\n        else if(this.__config.totalLength && this.__config.getItemComponent) {\r\n           return this.__config.totalLength;\r\n        }\r\n        return 0;\r\n    };\r\n\t\r\n\tNSVirtualScroll.prototype.__addNewItems = function(arrNewItem,isPrepend)\r\n\t{\r\n\t\tif(!this.util.isUndefinedOrNull(arrNewItem))\r\n\t\t{\r\n\t\t\tarrNewItem = this.util.isArray(arrNewItem) ? arrNewItem : [arrNewItem];\r\n\t\t\tif(arrNewItem && arrNewItem.length)\r\n\t\t\t{\r\n\t\t\t\tvar arrItem = [];\r\n\t\t\t\tfor(var count = 0;count < arrNewItem.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tarrItem.push(arrNewItem.items[count]);\r\n\t\t\t\t}\r\n\t\t\t\tvar arrExisting = this.__internal.arrItem;\r\n\t\t\t\tthis.__internal.arrItem = isPrepend ? arrItem.concat(arrExisting) : arrExisting.concat(arrItem);\r\n\t\t\t\tthis.__addItems();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__handleTagAfterRender = function(itemPage)\r\n\t{\r\n\t\tvar contentElement = this.__config.contentElement;\r\n\t\tif(this.__config.itemTag == \"ol\")\r\n\t\t{\r\n\t\t\tcontentElement.setAttribute(\"start\", itemPage.itemsBefore);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__fetchChildren = function(element)\r\n\t{\r\n\t\tif(element)\r\n\t\t{\r\n\t\t\tvar arrChildren = element.children;\r\n\t\t\tvar arrRet = [];\r\n\t\t\tvar length = arrChildren.length;\r\n\t\t\tvar child = null;\r\n\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\tchild = arrChildren[count];\r\n\t\t\t\tarrRet.push(this.__getItemHtml(child));\r\n\t\t\t}\r\n\t\t\treturn arrRet;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__fireCallback = function(callbackName,args)\r\n\t{\r\n\t\tif(this.__config[callbackName]) {\r\n\t\t\tthis.__config[callbackName](args);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__hasCacheChanged = function(key,value)\r\n\t{\r\n\t\tvar changed = (value != this.__internal.objCache[key]);\r\n\t\tthis.__internal.objCache[key] = value;\r\n\t    return changed;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getCurrentPageNum = function()\r\n\t{\r\n\t\tthis.__internal.scrollPos = this.__config.scrollElement[this.__objSelectedProp.scroll];\r\n\t\tvar pageNum = Math.floor(this.__internal.scrollPos / (this.__internal.renderedSize - this.__internal.pageDimension)) || 0;\r\n\t\t//console.log(this.__internal.scrollPos + \",\" + this.__internal.renderedSize + \",\" + this.__internal.pageDimension + \",\" + pageNum);\r\n\t\treturn pageNum;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getExtraItem = function(cssClass,size)\r\n\t{\r\n\t\tvar item = this.util.createElement(this.__config.itemTag,null,this.__internal.cssExtraItem,this.__doc);\r\n\t\tcssClass && this.util.addStyleClass(item,cssClass);\r\n\t\tsize && (item.style[this.__objSelectedProp.size] = size + \"px\");\r\n\t\treturn (this.__internal.isItemHtml ? this.__getItemHtml(item) : item);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getEmptyItem = function()\r\n\t{\r\n\t\tif(this.__config.getEmptyItemComponent)\r\n\t\t{\r\n\t\t\tvar comp = new this.__config.getEmptyItemComponent();\r\n\t\t\treturn (this.__internal.isItemHtml ? this.__getItemHtml(comp.getElement()) : comp.getElement());\r\n\t\t}\r\n\t\tvar item = this.util.createElement(this.__config.itemTag,null,null,this.__doc);\r\n\t\tif(this.__config.itemTag == \"tr\")\r\n\t\t{\r\n\t\t\titem.innerHTML = \"<td colSpan='1000'></td>\";\r\n\t\t}\r\n\t\treturn (this.__internal.isItemHtml ? this.__getItemHtml(item) : item);\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getItemHtml = function(item)\r\n\t{\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\treturn this.util.isString(item) ? item : item.outerHTML;\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__addLoader = function()\r\n\t{\r\n\t\tif(this.__config.enableLoader)\r\n\t\t{\r\n\t\t\tthis.__internal.divLoader = this.util.createDiv(null,\"nsVirtualScrollLoader\");\r\n\t\t\tvar divText = null;\r\n\t\t\tif(this.__config.getLoaderComponent)\r\n\t\t\t{\r\n\t\t\t\tvar comp = new this.__config.getLoaderComponent();\r\n\t\t\t\tdivText = comp.getElement();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tdivText = this.util.createDiv(null,\"nsVirtualScrollLoaderTextCon\");\r\n\t\t\t\tdivText.innerHTML = \"<b class=\\\"nsVirtualScrollLoaderText\\\">Rendering...</b>\";\r\n\t\t\t}\r\n\t\t\tthis.__internal.divLoader.appendChild(divText);\r\n\t\t\tthis.__setLoaderVisibility(false);\r\n\t\t\tthis.__config.scrollElement.appendChild(this.__internal.divLoader);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__setLoaderVisibility = function(isShow)\r\n\t{\r\n\t\tif(this.__internal.divLoader)\r\n\t\t{\r\n\t\t\tthis.__internal.divLoader.style.display = isShow ? \"\" : \"none\";\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__convertArrayToString = function(arrItem,separator)\r\n\t{\r\n\t\tif(arrItem)\r\n\t\t{\r\n\t\t\tseparator = separator ? separator : \"\";\r\n\t\t\treturn this.util.isArray(arrItem) ? arrItem.join(separator) : arrItem;\r\n\t\t}\r\n\t\treturn \"\";\r\n\t};\r\n\t\r\n\tNSVirtualScroll.prototype.__getInt = function(value)\r\n\t{\r\n\t\treturn parseInt(value,10) || 0;\r\n\t};\r\n\t\r\n\tNSVirtualScroll.DIRECTION_VERTICAL = \"vertical\";\r\n\tNSVirtualScroll.DIRECTION_HORIZONTAL = \"horizontal\";\r\n\t\r\n\treturn NSVirtualScroll;\r\n})();\r\nnsModuleExport(this,\"NSVirtualScroll\",NSVirtualScroll);\r\nvar NSList = (function()\r\n{\r\n\tfunction NSList(component,setting) \r\n\t{\r\n\t\t//this.base.call(this);\r\n\t\tthis.ITEM_SELECTED = \"itemSelected\";\r\n\t\tthis.ITEM_UNSELECTED = \"itemUnselected\";\r\n\t\tthis.ITEM_NAVIGATED = \"itemNavigated\";\r\n\t\tthis.NAVIGATION_UP = \"up\";\r\n\t\tthis.NAVIGATION_DOWN = \"down\";\r\n\t\tthis.ITEM_DROPPING = \"itemDropping\";\r\n\t\tthis.ITEM_DROPPED = \"itemDropped\";\r\n\t\tthis.DRAG_STARTED = \"dragStarted\";\r\n\t\tthis.DRAGGING = \"dragging\";\r\n\t\tthis.DRAG_END = \"dragEnd\";\r\n\t\t\r\n\t\tthis.__setting = setting;\r\n\t\tthis.__dataSource = null;\r\n\t\tthis.__labelField = \"label\";\r\n\t\tthis.__itemRenderer = null;\r\n\t\tthis.__templateID = null;\r\n\t\tthis.__setData = null;\r\n\t\tthis.__labelFunction = null;\r\n\t\tthis.__enableHierarchical = false;\r\n\t\tthis.__enableMouseHover = false;\r\n\t\tthis.__enableMouseHoverAnimation = false;\r\n\t\tthis.__disableHoverField = null;\r\n\t\tthis.__disableHoverFunction = null;\r\n\t\tthis.__enableKeyboardNavigation = false;\r\n\t\tthis.__enableMultipleSelection = false;\r\n\t\tthis.__enableCustomScrollBar = false;\r\n\t\tthis.__enableVirtualScroll = false;\r\n\t\tthis.__isDraggable = true;\r\n\t\tthis.__isDroppable = true;\r\n\t\tthis.__enableDragByHandle = false;\r\n\t\tthis.__dragHandlerClass = null;\r\n\t\tthis.__enableDragAfterHold = false;\r\n\t\tthis.__holdTime = 500;\r\n\t\tthis.__enableCloneMode = false;\r\n\t\tthis.__rowHeight = -1;\r\n\t\tthis.__noDataMessage = \"No matching records found\";\r\n\t\tthis.__enableContextMenu = false;\r\n\t\tthis.__enableVariableRowHeight = false;\r\n\t\tthis.__contextMenuProvider = null;\r\n\t\tthis.__contextMenuSetting = null;\r\n\t\tthis.__enableTruncateToFit = false;\r\n\t\tthis.__toolTipField = null;\r\n\t\tthis.__enableToolTipForTruncateText = false;\r\n\t\tthis.__toolTipRenderer = null;\r\n\t\t\r\n\t\tthis.__arrWrapper = null;\r\n\t\tthis.__arrInternalSource = null;\r\n\t\tthis.__arrFlatHierarchicalSource = [];\r\n\t\t\r\n\t\tthis.__divOuterContainer = null;\r\n\t\tthis.__divParentContainer = null;\r\n\t\tthis.__listContainer = null;\r\n\t\tthis.__scroller = null;\r\n\t\tthis.__scrollerSetting = {};\r\n\t\tthis.__customScrollBarSetting = {};\r\n\t\tthis.__customScrollBarTooltip = null;\r\n\t\t\r\n\t\tthis.__template = null;\r\n\t\tthis.__currentIndex = -1;\r\n\t\tthis.__selectedIndex = -1;\r\n\t\tthis.__navigationIndex = -1;\r\n\t\tthis.__selectedItem = null;\r\n\t\tthis.__selectedItems = [];\t\r\n\t\tthis.__selectedIndexes = [];\r\n\t\tthis.__lastNavigationDirection = null;\r\n\t\tthis.__orignalItemKey = [];\r\n\t\t//for keyboard navigation\r\n\t\tthis.__pageSize = 0;\r\n\t\tthis.__scrollTarget = null;\r\n\t\tthis.__startArrayElement = -1;\r\n\t\tthis.__listItemHeight = 0;\r\n\t\t//for Virtual Scroll\r\n\t\tthis.__virtualScrollSetting = {};\r\n\t\tthis.__nsVirtualScroll = null; \r\n\t\tthis.__virtualRowHeight = 0;\r\n\t\t\r\n\t\tthis.__childField = \"children\";\r\n\t\tthis.__CLASS_GROUP_CELL = \"nsListGroupCell\";\r\n\t\tthis.__CLASS_CELL_CHILD = \"nsListCellChild\";\r\n\t\t\r\n\t\t//removing this.getID() as prefix as move functionality from one list to another would have different fields.\r\n\t\tthis.__fieldPrefix = \"ns_field\";\r\n\t\tthis.__fieldIndex =  this.__fieldPrefix + \"_item_index\";\r\n\t\tthis.__fieldVisibleIndex = this.__fieldPrefix + \"_item_visible_index\";\r\n\t\tthis.__fieldItem = this.__fieldPrefix + \"_item\";\r\n\t\tthis.__fieldDisableHover = this.__fieldPrefix + \"_disableHover\";\r\n\t\tthis.__fieldSelected = this.__fieldPrefix + \"_selected\";\r\n\t\tthis.__fieldHover = this.__fieldPrefix + \"_hover\";\r\n\t\t\r\n\t\tthis.__fieldItemLevel = this.__fieldPrefix + \"_item_level\";\r\n\t\tthis.__fieldItemVisible = this.__fieldPrefix + \"_item_visible\";\r\n\t\tthis.__fieldParentIndex = this.__fieldPrefix + \"_parent_index\";\r\n\t\tthis.__fieldHasChild = this.__fieldPrefix + \"_item_hasChild\";\r\n\t\tthis.__fieldHasParent = this.__fieldPrefix + \"_item_hasParent\";\r\n\t\tthis.__fieldIsCollapsed = this.__fieldPrefix + \"_item_isCollapsed\";\r\n\t\tthis.__fieldItemArrow = this.__fieldPrefix + \"_item_arrow\";\r\n\t\t\r\n\t\tthis.__isShiftPressed = false;\r\n\t\tthis.__isCtrlPressed = false;\r\n\t\t\r\n\t\tthis.__objGrid = null;\r\n\t\tthis.__nsListFilter = null;\r\n\t\tthis.__nsListDragDrop = null;\r\n\t\tthis.__nsToolTipInElement = null;\r\n\t\t\r\n\t\tthis.__keyDownRef = null;\r\n\t\tthis.__keyUpRef = null;\r\n\t\tthis.base.__setBaseComponent.call(this,component);\r\n\t};\r\n\tnsExtendPrototype(NSContainerBase,NSList);\r\n\tNSList.prototype.constructor = NSList;\r\n\t\r\n\tNSList.prototype.initializeComponent = function() \r\n\t{\r\n\t\tthis.base.initializeComponent.call(this);\r\n\t\tthis.__setSetting();\r\n\t\tthis.__initializePluggins();\r\n\t};\r\n\t\r\n\tNSList.prototype.setComponentProperties = function() \r\n\t{\r\n\t\tthis.base.setComponentProperties.call(this);\r\n\t\tthis.__objGrid.__addSVGInPage();\r\n\t\tthis.__setTemplate();\r\n\t\tthis.__objGrid.__initialize();\r\n\t\tthis.__addListenerForBody();\r\n\t\tif(this.__dataSource)\r\n\t\t{\r\n\t\t\tthis.dataSource(this.__dataSource);\r\n\t\t}\r\n\t\tif(!window[\"nsListMap\"])\r\n\t\t{\r\n\t\t\twindow[\"nsListMap\"] = {};\r\n\t\t}\r\n\t\twindow[\"nsListMap\"][this.getID()] = this;\r\n\t};\r\n\t\r\n\tNSList.prototype.propertyChange = function(attrName, oldVal, newVal, setProperty)\r\n\t{\r\n\t\tvar attributeName = attrName.toLowerCase();\r\n\t\tthis.base.propertyChange.call(this,attrName, oldVal, newVal, setProperty);\r\n\t};\r\n\t\r\n\tNSList.prototype.removeComponent = function() \r\n\t{\r\n\t\tif(this.__keyDownRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"keydown\",this.__keyDownRef);\r\n\t\t\tthis.__keyDownRef = null;\r\n\t\t}\r\n\t\tif(this.__keyUpRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"keyup\",this.__keyUpRef);\r\n\t\t\tthis.__keyUpRef = null;\r\n\t\t}\r\n\t\tif(this.__scroller)\r\n\t\t{\r\n\t\t\tthis.__scroller.__destroyElements();\r\n\t\t\tthis.__scroller = null;\r\n\t\t}\r\n\t\tthis.base.removeComponent.call(this);\r\n\t};\r\n\t\r\n\tNSList.prototype.componentResized = function(event) \r\n\t{\r\n\t\tthis.base.componentResized.call(this,event);\r\n\t};\r\n\t\r\n\tNSList.prototype.expandAll = function()\r\n\t{\r\n\t\tif(this.__enableHierarchical)\r\n\t\t{\r\n\t\t\tthis.__expandCollapseAll(false);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.collapseAll = function()\r\n\t{\r\n\t\tif(this.__enableHierarchical)\r\n\t\t{\r\n\t\t\tthis.__expandCollapseAll(true);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.setContextMenuSetting = function(contextMenuSetting)\r\n\t{\r\n\t\tthis.__contextMenuSetting = contextMenuSetting;\r\n\t};\r\n\t\r\n\tNSList.prototype.__setSetting = function()\r\n\t{\r\n\t\tvar setting = this.__setting;\r\n\t\tif(setting)\r\n\t\t{\r\n\t\t\tif(setting.hasOwnProperty(\"enableHierarchical\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableHierarchical = Boolean.parse(setting[\"enableHierarchical\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableVirtualScroll\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableVirtualScroll = Boolean.parse(setting[\"enableVirtualScroll\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableDragDrop\"))\r\n\t\t\t{\r\n\t\t\t\tif(!this.__enableVirtualScroll)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__enableDragDrop = Boolean.parse(setting[\"enableDragDrop\"]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"isDraggable\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__isDraggable = Boolean.parse(setting[\"isDraggable\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"isDroppable\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__isDroppable = Boolean.parse(setting[\"isDroppable\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableDragByHandle\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableDragByHandle = Boolean.parse(setting[\"enableDragByHandle\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"dragHandlerClass\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__dragHandlerClass = setting[\"dragHandlerClass\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableDragAfterHold\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableDragAfterHold = Boolean.parse(setting[\"enableDragAfterHold\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"holdTime\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__holdTime = parseInt(setting[\"holdTime\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableCloneMode\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableCloneMode = Boolean.parse(setting[\"enableCloneMode\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"labelField\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__labelField = setting[\"labelField\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"itemRenderer\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__itemRenderer = setting[\"itemRenderer\"];\r\n\t\t\t\tthis.__itemRenderer = this.util.getFunction(this.__itemRenderer);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"template\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__templateID = setting[\"template\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"setData\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__setData = setting[\"setData\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"labelFunction\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__labelFunction = setting[\"labelFunction\"];\r\n\t\t\t\tthis.__labelFunction = this.util.getFunction(this.__labelFunction);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableMultipleSelection\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableMultipleSelection =  Boolean.parse(setting[\"enableMultipleSelection\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableCustomScrollBar\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableCustomScrollBar =  Boolean.parse(setting[\"enableCustomScrollBar\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableKeyboardNavigation\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableKeyboardNavigation =  Boolean.parse(setting[\"enableKeyboardNavigation\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableMouseHover\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableMouseHover =  Boolean.parse(setting[\"enableMouseHover\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableMouseHoverAnimation\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableMouseHoverAnimation =  Boolean.parse(setting[\"enableMouseHoverAnimation\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"disableHoverField\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__disableHoverField = setting[\"disableHoverField\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"disableHoverFunction\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__disableHoverFunction = setting[\"disableHoverFunction\"];\r\n\t\t\t\tthis.__disableHoverFunction = this.util.getFunction(this.__disableHoverFunction);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"rowHeight\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__rowHeight =  parseInt(setting[\"rowHeight\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"noDataMessage\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__noDataMessage = setting[\"noDataMessage\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"dataSource\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__dataSource = setting[\"dataSource\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"childField\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__childField = setting[\"childField\"];\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableContextMenu\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableContextMenu = Boolean.parse(setting[\"enableContextMenu\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"contextMenuProvider\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__contextMenuProvider =  setting[\"contextMenuProvider\"];\r\n\t\t\t\tthis.__contextMenuProvider = this.util.getFunction(this.__contextMenuProvider);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"enableVariableRowHeight\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableVariableRowHeight =  Boolean.parse(setting[\"enableVariableRowHeight\"]);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"customScrollBarSetting\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__customScrollBarSetting =  setting[\"customScrollBarSetting\"];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__customScrollBarSetting = {enableTooltip: false,toolTipLabelFunction: null,verticalScrollButtons: {enable: false},horizontalScrollButtons:{enable: false}};\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"virtualScrollSetting\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__virtualScrollSetting = setting[\"virtualScrollSetting\"];\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__virtualScrollSetting = {pageSize: null,pagesRendered: null,enableScrollDelay: false,scrollInterval: null,resizeInterval: null,enableLoader: false,getLoaderComponent: null};\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.dataSource = function(source)\r\n\t{\r\n\t\tthis.__dataSource = source;\r\n\t\tif(this.__listContainer)\r\n\t\t{\r\n\t\t\tthis.util.removeAllChildren(this.__listContainer);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__createStructure();\r\n\t\t}\r\n\t\tif(this.__dataSource && this.__dataSource.length > 0)\r\n\t\t{\r\n\t\t\tthis.__orignalItemKey = Object.keys(this.__dataSource[0]);\r\n\t\t\tthis.__objGrid.dataSource();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__arrWrapper = [];\r\n\t\t\tthis.__arrInternalSource = [];\r\n\t\t\tthis.__updateTotalRecords(0);\r\n\t\t}\r\n\t\tthis.__renderBody();\r\n\t};\r\n\t\r\n\tNSList.prototype.getOrignalItem = function(item)\r\n\t{\r\n\t\tif(item && this.__orignalItemKey && this.__orignalItemKey.length > 0)\r\n\t\t{\r\n\t\t\tvar retItem = {};\r\n\t\t\tvar key = null;\r\n\t\t\tfor(var count = 0;count < this.__orignalItemKey.length;count++)\r\n\t\t\t{\r\n\t\t\t\tkey = this.__orignalItemKey[count];\r\n\t\t\t\tretItem[key] = item[key];\r\n\t\t\t}\r\n\t\t\treturn retItem;\r\n\t\t}\r\n\t\treturn item;\r\n\t};\r\n\t\r\n\tNSList.prototype.addItems = function(arrItem)\r\n\t{\r\n\t\tthis.__addItem(arrItem);\r\n\t};\r\n\t\r\n\tNSList.prototype.addItemsAsChildren = function(item,arrChildren)\r\n\t{\r\n\t\tthis.__objGrid.addItemsAsChildren(item,arrChildren);\r\n\t};\r\n\t\r\n\tNSList.prototype.removeItems = function(arrObject)\r\n\t{\r\n\t\tif(arrObject && arrObject.length > 0)\r\n\t\t{\r\n\t\t\tvar arrIndex = [];\r\n\t\t\tif(this.util.isNumber(arrObject[0]))\r\n\t\t\t{\r\n\t\t\t\tarrIndex = arrObject;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor (var count = 0;count < arrObject.length;count++)\r\n\t\t\t    {\r\n\t\t\t\t\tvar item = arrObject[count];\r\n\t\t\t\t\tif(item && item[this.__fieldIndex])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tarrIndex.push(item[this.__fieldIndex]);\r\n\t\t\t\t\t}\r\n\t\t\t    }\r\n\t\t\t}\r\n\t\t\tarrIndex.sort();\r\n\t   \t \tfor (var rowIndex = arrIndex.length - 1; rowIndex >= 0; rowIndex--)\r\n\t\t    {\r\n\t   \t \t\tvar index = arrIndex[rowIndex];\r\n\t   \t \t\tif(index > 0 && index < this.__arrInternalSource.length)\r\n\t   \t \t\t{\r\n\t\t   \t \t\t//if virtual scroll or Pagination of type Page is enabled then do not remove rows\r\n\t\t   \t \t\tif(!this.__enableVirtualScroll)\r\n\t\t   \t \t\t{\r\n\t\t   \t \t\t\tthis.__listContainer.removeChild(this.__listContainer.childNodes[index]);\r\n\t\t   \t \t\t}\r\n\t\t   \t \t\tthis.__arrInternalSource.splice(index, 1);\r\n\t\t   \t \t\tthis.__arrWrapper.splice(index, 1);\r\n\t   \t \t\t}\r\n\t\t    }\r\n\t\t \tthis.__updateTotalRecords();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.scrollToIndex = function(selectedIndex,animationRequired)\r\n\t{\r\n\t\tselectedIndex = parseInt(selectedIndex);\r\n\t\tvar source = this.__objGrid.__getFlatSource();\r\n\t\tif(selectedIndex > -1 && source && selectedIndex < source.length)\r\n\t\t{\r\n\t\t\tvar item = this.__getItemByIndex(selectedIndex);\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.__enableCustomScrollBar)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar targetDimension = this.__virtualRowHeight * (selectedIndex - 1);\r\n\t\t\t\t\t\tthis.__setVirtualScroll_ScrollTop(targetDimension);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//var item = this.__getVisibleItemByIndex(this.__arrInternalSource,selectedIndex);\r\n\t\t\t\t\t\tif(this.__nsVirtualScroll)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t//because in list index is index+1\r\n\t\t\t\t\t\t\tthis.__nsVirtualScroll.scrollToIndex(selectedIndex - 1,animationRequired);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif(item[this.__fieldItem])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar targetDimension = item[this.__fieldItem].offsetTop;\r\n\t\t\t\t\t\tvar scrollTarget = this.__divOuterContainer;\r\n\t\t\t\t\t\tif(animationRequired)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar animation = new this.util.animation(scrollTarget,[\r\n\t\t\t\t       \t  \t    {\r\n\t\t\t\t       \t  \t      time: 500,\r\n\t\t\t\t       \t  \t      property:\"scrollTop\",\r\n\t\t\t\t       \t  \t      target: targetDimension,\r\n\t\t\t\t       \t  \t    }\r\n\t\t\t\t       \t  \t]);\r\n\t\t\t\t   \t  \t  \tanimation.animate();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tscrollTarget.scrollTop = targetDimension;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.setSelectedItems = function(arrItems)\r\n\t{\r\n\t\tif(arrItems && arrItems.length > 0)\r\n\t\t{\r\n\t\t\tvar source = this.__objGrid.__getFlatSource();\r\n\t\t\tif(source)\r\n\t\t\t{\r\n\t\t\t\tthis.__clearAllRowSelection(false);\r\n\t\t\t\tvar length = arrItems.length;\r\n\t\t\t\tvar item = null;\r\n\t\t\t\tvar index = -1;\r\n\t\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\titem = arrItems[count];\r\n\t\t\t\t\tindex = this.__getIndexByItem(item);\r\n\t\t\t\t\tif(index > -1 && source && index < source.length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__setIndex(index,true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.setSelectedItem = function(arrItems)\r\n\t{\r\n\t\tthis.setSelectedItems([arrItems]);\r\n\t};\r\n\t\r\n\tNSList.prototype.setSelectedIndexes = function(arrSelectedIndex)\r\n\t{\r\n\t\tif(arrSelectedIndex && arrSelectedIndex.length > 0)\r\n\t\t{\r\n\t\t\tvar source = this.__objGrid.__getFlatSource();\r\n\t\t\tif(source)\r\n\t\t\t{\r\n\t\t\t\tvar length = arrSelectedIndex.length;\r\n\t\t\t\tvar index = -1;\r\n\t\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tindex = arrSelectedIndex[count];\r\n\t\t\t\t\tif(index > -1 && source && index < source.length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__setIndex(index,true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.setSelectedIndex = function(selectedIndex)\r\n\t{\r\n\t\tthis.setSelectedIndexes([selectedIndex]);\r\n\t};\r\n\t\r\n\tNSList.prototype.unSelectItems = function(arrItems)\r\n\t{\r\n\t\t\r\n\t};\r\n\t\r\n\tNSList.prototype.unSelectItem = function(arrItems)\r\n\t{\r\n\t\tthis.unSelectItems([arrItems]);\r\n\t};\r\n\t\r\n\tNSList.prototype.unSelectIndexes = function(arrSelectedIndex)\r\n\t{\r\n\t\t\r\n\t};\r\n\t\r\n\tNSList.prototype.unSelectIndex = function(selectedIndex)\r\n\t{\r\n\t\tthis.unSelectIndexes([selectedIndex]);\r\n\t};\r\n\t\r\n\tNSList.prototype.getSelectedIndex = function()\r\n\t{\r\n\t\treturn this.__selectedIndex;\r\n\t};\r\n\t\r\n\tNSList.prototype.getSelectedItem = function()\r\n\t{\r\n\t\treturn this.__selectedItem;\r\n\t};\r\n\t\r\n\tNSList.prototype.getSelectedIndexes = function()\r\n\t{\r\n\t\treturn this.__selectedIndexes;\r\n\t};\r\n\t\r\n\tNSList.prototype.getSelectedItems = function()\r\n\t{\r\n\t\treturn this.__selectedItems;\r\n\t};\r\n\t\r\n\tNSList.prototype.deselectAll = function()\r\n\t{\r\n\t\tthis.__clearAllRowSelection(true);\r\n\t};\r\n\t\r\n\tNSList.prototype.filter = function(strData,setting,enableHighlighting,recordLimit)\r\n\t{\r\n\t\tthis.__nsListFilter.filter(strData,setting,enableHighlighting,recordLimit);\r\n\t};\r\n\t\r\n\tNSList.prototype.resetFilter = function()\r\n\t{\r\n\t\tthis.__nsListFilter.reset();\r\n\t};\r\n\t\r\n\tNSList.prototype.updateListItemByIndex = function(index)\r\n\t{\r\n\t\tvar item = this.__getItemByIndex(index);\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\tvar listItem = this.__getListItemFromItem(item);\r\n\t\t\tif(listItem)\r\n\t\t\t{\r\n\t\t\t\tvar index = this.__getIndexByItem(item);\r\n\t\t\t\tthis.__updateListItemText(listItem,item,index);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__highlightDiv = function(divText)\r\n\t{\r\n\t\tthis.__nsListFilter.__highlightDiv(divText);\r\n\t};\r\n\t\r\n\tNSList.prototype.__initializePluggins = function()\r\n\t{\r\n\t\tif(!this.__objGrid)\r\n\t\t{\r\n\t\t\tif(this.__enableHierarchical)\r\n\t\t\t{\r\n\t\t\t\tthis.__objGrid = new NSHierarchicalList(this);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__objGrid = new NSFlatList(this);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(!this.__nsListFilter)\r\n\t\t{\r\n\t\t\tthis.__nsListFilter = new NSListFilter(this);\r\n\t\t\tif(this.__enableDragDrop)\r\n\t\t\t{\r\n\t\t\t\tthis.__nsListDragDrop = new NSListDragDrop(this);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__nsToolTipInElement = new this.util.nsToolTipInElement();\r\n\t};\r\n\t\r\n\tNSList.prototype.__createStructure = function()\r\n\t{\r\n\t\tif(!this.__divOuterContainer)\r\n\t\t{\r\n\t\t\tthis.__divOuterContainer = this.util.createDiv(this.getID() + \"container\",\"nsListOuterContainer\");\r\n\t\t\tif(this.__enableHierarchical)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(this.__divOuterContainer,\"nsListOuterContainerHierarchical\")\r\n\t\t\t}\r\n\t\t\tthis.__divOuterContainer.style.width = this.util.getStyleValue(this.__baseComponent,\"width\");\r\n\t\t\t//this.__divOuterContainer.style.height = this.util.getStyleValue(this.__baseComponent,\"height\");\r\n\t\t\tthis.addChild(this.__divOuterContainer);\r\n\t\t\tthis.__divParentContainer = this.util.createDiv(this.getID() + \"parentContainer\",\"nsListParentContainer\");\r\n\t\t\tthis.__divOuterContainer.appendChild(this.__divParentContainer);\r\n\t\t\tthis.__listContainer = this.util.createElement(\"ul\",this.getID() + \"list\",\"nsListContainer\");\r\n\t\t\tthis.__listContainer.style.minHeight = (this.__divOuterContainer.clientHeight - 10) + \"px\";\r\n\t\t\tthis.__divParentContainer.appendChild(this.__listContainer);\r\n\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(this.__divParentContainer,\"nsListBodyContainerVirtual\");\r\n\t\t\t}\r\n\t\t\tthis.__createCustomScroller();\r\n\t\t}\r\n\t};\r\n\r\n\tNSList.prototype.__renderBody = function()\r\n\t{\r\n\t\tthis.__navigationIndex = -1;\r\n\t\tif(this.__enableContextMenu)\r\n\t\t{\r\n\t\t\tthis.__initializeContextMenu();\r\n\t\t}\r\n\t\tif(this.__enableVirtualScroll)\r\n\t\t{\r\n\t\t\tthis.__setNSVirtualScroll(this.__arrInternalSource);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.util.removeAllChildren(this.__listContainer);\r\n\t\t\tthis.__createList(this.__arrInternalSource,0,this.__arrInternalSource.length);\r\n\t\t\t//5 is offset for number of rows\r\n\t\t\tvar listItem = this.__getListItemByIndex(0);\r\n\t\t\tif(listItem)\r\n\t\t\t{\r\n\t\t\t\tthis.__listItemHeight = listItem.clientHeight;\r\n\t\t\t}\r\n\t\t\tthis.__pageSize = (this.__divOuterContainer.clientHeight/this.__listItemHeight) - 5;\r\n\t\t\tthis.__startArrayElement = 0;\r\n\t\t}\r\n\t\t//this.__listContainer.scrollTop = 0;\r\n\t\tif(this.__nsListDragDrop)\r\n\t\t{\r\n\t\t\tthis.__nsListDragDrop.initialize();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setNSVirtualScroll = function(source)\r\n\t{\r\n\t\tvar length = 0;\r\n\t\tif(source && source.length)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < source.length;count++)\r\n\t\t\t{\r\n\t\t\t\tif(source[count][this.__fieldItemVisible])\r\n\t\t\t\t{\r\n\t\t\t\t\tlength++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(this.__nsVirtualScroll)\r\n\t\t{\r\n\t\t\tthis.__nsVirtualScroll.dataSource(length);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(length > 0)\r\n\t\t\t{\r\n\t\t\t\tif(this.__rowHeight > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__virtualRowHeight = this.__rowHeight;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__createList(this.__arrInternalSource,0,1);\r\n\t\t\t\t\tvar item = this.__arrInternalSource[0];\r\n\t\t\t\t\tvar listItem = item[this.__fieldItem];\r\n\t\t\t\t    this.__virtualRowHeight = listItem.offsetHeight;\r\n\t\t\t\t    listItem.parentNode.removeChild(listItem);\r\n\t\t\t\t}\r\n\t\t\t\tvar setting = {scrollElement: this.__divOuterContainer,contentElement: this.__listContainer,itemTag: \"li\",totalLength: length,getItemComponent:this.__getItemComponentForVirtual.call(this),getEmptyItemComponent:this.__getEmptyItemComponentForVirtual.call(this)};\r\n\t\t\t\tvar virtualScrollSetting = this.__virtualScrollSetting;\r\n\t\t\t\tvar arrCopyFields = [\"pageSize\",\"pagesRendered\",\"enableScrollDelay\",\"scrollInterval\",\"resizeInterval\",\"enableLoader\",\"getLoaderComponent\"];\r\n\t\t\t\tvar field = null;\r\n\t\t\t\tfor(var count = 0;count < arrCopyFields.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tfield = arrCopyFields[count];\r\n\t\t\t\t\tif(!this.util.isUndefinedOrNull(virtualScrollSetting[field]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tsetting[field] = virtualScrollSetting[field];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.__nsVirtualScroll = new NSVirtualScroll(setting);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__getItemComponentForVirtual = function()\r\n\t{\r\n\t\tvar list = this;\r\n\t\tvar CreateListItem = function(index)\r\n\t\t{\r\n\t\t\tthis.__index = index;\r\n\t\t\tthis.__list =  list;\r\n\t\t\tthis.__item = null;\r\n\t\t\tthis.__listItem = null;\r\n\t\t};\r\n\t\tCreateListItem.prototype.getElement = function()\r\n\t\t{\r\n\t\t\tif(!this.__listItem)\r\n\t\t\t{\r\n\t\t\t\tif(this.__list.__enableHierarchical)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__item = this.__list.__getVisibleItemByIndex(null,this.__index);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__item = this.__list.__arrInternalSource[this.__index];\r\n\t\t\t\t}\r\n\t\t\t\tthis.__listItem = this.__list.__createListItem(this.__item,false);\r\n\t\t\t}\r\n\t\t\treturn this.__listItem;\r\n\t\t};\r\n\t\treturn CreateListItem;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getEmptyItemComponentForVirtual = function()\r\n\t{\r\n\t\tvar list = this;\r\n\t\tvar CreateEmptyListItem = function()\r\n\t\t{\r\n\t\t\tthis.__list =  list;\r\n\t\t\tthis.__listItem = null;\r\n\t\t};\r\n\t\tCreateEmptyListItem.prototype.getElement = function()\r\n\t\t{\r\n\t\t\tif(!this.__listItem)\r\n\t\t\t{\r\n\t\t\t\tthis.__listItem = this.__list.__createNoDataRow.call(this.__list);\r\n\t\t\t}\r\n\t\t\treturn this.__listItem;\r\n\t\t};\r\n\t\treturn CreateEmptyListItem;\r\n\t};\r\n\t\r\n\tNSList.prototype.__createCustomScroller = function()\r\n\t{\r\n\t\tif(this.__enableCustomScrollBar && !this.__scroller)\r\n\t\t{\r\n\t\t\tvar setting = {element: this.__divOuterContainer,enableCustomHandler: true,verticalScrollButtons:this.__customScrollBarSetting.verticalScrollButtons,horizontalScrollButtons:this.__customScrollBarSetting.horizontalScrollButtons};\r\n\t\t\tfor (var key in setting) \r\n\t\t\t{ \r\n\t\t\t\tthis.__scrollerSetting[key] = setting[key]; \r\n\t\t\t}\r\n\t\t\tthis.__scroller = new NSScroller(this.__scrollerSetting);\r\n\t\t\tthis.util.addEvent(this.__scrollerSetting.element,NSScroller.SCROLLING,this.__customScrollHandler.bind(this));\r\n\t\t\tthis.util.addEvent(this.__scrollerSetting.element,NSScroller.SCROLL_END,this.__customScrollEndHandler.bind(this));\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__customScrollHandler = function(event)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar virtualVerHandler = function()\r\n\t\t{\r\n\t\t\t//todo Virtual Scroll impl for Custom Scroll Bar\r\n\t\t};\r\n\t\tvar dataRefreshVerHandler = function()\r\n\t\t{\r\n\t\t\t\r\n\t\t};\r\n\t\tvar asyncLoadVerHandler = function()\r\n\t\t{\r\n\t\t\t\r\n\t\t};\r\n\t\tvar paginationVerHandler = function()\r\n\t\t{\r\n\t\t\t\r\n\t\t};\r\n\t\tvar normalVerHandler = function()\r\n\t\t{\r\n\t\t\tself.__divOuterContainer.scrollTop = scrollPos;\r\n\t\t\t\r\n\t\t\tvar first,last;\r\n\t\t\tvar arrRows = self.__listContainer.querySelectorAll(\"li\");\r\n\t\t\tfor(var count = 0;count < arrRows.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar li = arrRows[count];\r\n\t\t\t\tif(isInViewport(li))\r\n\t\t\t\t{\r\n\t\t\t\t\tfirst = li;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor(;count < arrRows.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar li = arrRows[count];\r\n\t\t\t\tif(!isInViewport(li))\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tlast = li;\r\n\t\t\t}\r\n\t\t\tconsole.log(first,last);\r\n\t\t};\r\n\t\tvar normalHorHandler = function()\r\n\t\t{\r\n\t\t\tself.__divOuterContainer.scrollLeft = scrollPos;\r\n\t\t};\r\n\t\tvar isInViewport = function (elem) \r\n\t\t{\r\n\t\t\tif(elem)\r\n\t\t\t{\r\n\t\t\t\t/*var distance = elem.getBoundingClientRect();\r\n\t\t\t\treturn (\r\n\t\t\t\t\tdistance.top >= 0 &&\r\n\t\t\t\t\tdistance.left >= 0 &&\r\n\t\t\t\t\tdistance.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n\t\t\t\t\tdistance.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n\t\t\t\t);*/\r\n\t\t\t\tconst rect = elem.getBoundingClientRect();\r\n\t\t\t    const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\r\n\t\t\t    const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\r\n\r\n\t\t\t    const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\r\n\t\t\t    const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\r\n\r\n\t\t\t    return (vertInView && horInView);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\t\tvar objCondition = {virtualScroll:{eligible:this.__enableVirtualScroll,verHandler:virtualVerHandler,horHandler:normalHorHandler},\r\n\t\t\t\t\t\t\tdataRefreshOnEnd:{eligible:this.__enableDataRefreshOnScrollEnd,verHandler:dataRefreshVerHandler,horHandler:normalHorHandler},\r\n\t\t\t\t\t\t\tasyncLoad:{eligible:this.__enableAsyncLoadPagination,verHandler:asyncLoadVerHandler,horHandler:normalHorHandler},\r\n\t\t\t\t\t\t\tpagination:{eligible:(this.__enablePagination && this.__isPaginationTypeScroll),verHandler:paginationVerHandler,horHandler:normalHorHandler},\r\n\t\t\t\t\t\t\tnormal:{eligible:true,verHandler:normalVerHandler,horHandler:normalHorHandler}\r\n\t\t\t\t\t\t   };\r\n\t\tvar eventItem = event;\r\n\t\tvar direction = eventItem.direction;\r\n\t\tvar scrollPos = eventItem.scrollPos;\r\n\t\tvar oldScrollPos = eventItem.oldScrollPos;\r\n\t\tvar orignalEvent = eventItem.orignalEvent;\r\n\t\tvar scrollBar = eventItem.scrollBar;\r\n\t\tvar position = eventItem.absoluteScrollBarPos;\r\n\t\tfor(var key in objCondition)\r\n\t\t{\r\n\t\t\tvar item = objCondition[key];\r\n\t\t\tif(item.eligible)\r\n\t\t\t{\r\n\t\t\t\tif(direction == \"vertical\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(item.verHandler)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(this.__customScrollBarSetting[\"enableTooltip\"] && !this.__customScrollBarTooltip)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.__customScrollBarTooltip = this.util.createElement(\"span\",null,\"tooltiptext tooltip-left\");\r\n\t\t\t\t\t\t\tdocument.body.appendChild(this.__customScrollBarTooltip);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\titem.verHandler();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tif(item.horHandler)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem.horHandler();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__customScrollEndHandler = function(event)\r\n\t{\r\n\t\tif(this.__customScrollBarTooltip)\r\n\t\t{\r\n\t\t\tdocument.body.removeChild(this.__customScrollBarTooltip);\r\n\t\t\tthis.__customScrollBarTooltip = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__customScrollTooltipPos = function(scrollbar,position,itemFrom,itemTo)\r\n\t{\r\n\t\tif(this.__customScrollBarTooltip)\r\n\t\t{\r\n\t\t\tvar toolTip = this.__customScrollBarTooltip;\r\n\t\t\tvar css = {};\r\n\t\t\t//5 for the triangle\r\n\t\t\tcss.left = (position.x - toolTip.offsetWidth - 5) + \"px\";\r\n\t\t\tcss.top = position.y + \"px\";\r\n\t\t\tthis.util.css(toolTip,css);\r\n\t\t\tif(this.__customScrollBarSetting.toolTipLabelFunction)\r\n\t\t\t{\r\n\t\t\t\ttoolTip.innerHTML = this.__customScrollBarSetting.toolTipLabelFunction(itemFrom,itemTo);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\ttoolTip.innerHTML = \"Showing Record from index \" + itemFrom + \" to \" +  itemTo;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t};\r\n\t\r\n\tNSList.prototype.__virtualRowSelection = function()\r\n\t{\r\n\t\tif(this.__listContainer.children && this.__listContainer.children.length > 0 && this.__arrInternalSource)\r\n\t\t{\r\n\t\t\tvar listItem = null;\r\n\t\t\tvar index = null;\r\n\t\t\tvar item = null;\r\n\t\t\tfor(var count = 0; count < this.__listContainer.children.length; count++) \r\n\t\t\t{\r\n\t\t\t\tlistItem = this.__listContainer.children[count];\r\n\t\t\t\tindex = this.__getIndexFromTarget(listItem);\r\n\t\t\t\titem = this.__getItemByIndex(index);\r\n\t\t\t\tif(item && this.__isMouseHoverAllowed(index))\r\n\t\t\t\t{\r\n\t\t\t\t\tif(item[this.__fieldSelected])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//DONOT REPLACE WITH __markRowSelected\r\n\t\t\t\t\t\tthis.util.addStyleClass(listItem,\"nsListItemSelected\"); \r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t//DONOT REPLACE WITH __markRowUnselected\r\n\t\t\t\t\t\tthis.util.removeStyleClass(listItem,\"nsListItemSelected\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__virtualRowHover = function()\r\n\t{\r\n\t\tif(this.__listContainer.children && this.__listContainer.children.length > 0 && this.__arrInternalSource)\r\n\t\t{\r\n\t\t\tvar listItem = null;\r\n\t\t\tvar index = null;\r\n\t\t\tvar item = null;\r\n\t\t\tfor(var count = 0; count < this.__listContainer.children.length; count++) \r\n\t\t\t{\r\n\t\t\t\tlistItem = this.__listContainer.children[count];\r\n\t\t\t\tindex = this.__getIndexFromTarget(listItem);\r\n\t\t\t\titem = this.__getItemByIndex(index);\r\n\t\t\t\t(item && item[this.__fieldHover]) ? this.util.addStyleClass(listItem,\"nsListItemHover\") : this.util.removeStyleClass(listItem,\"nsListItemHover\");\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setVirtualRowHoverField = function(indexToSet)\r\n\t{\r\n\t\tif(this.util.isUndefinedOrNull(indexToSet))\r\n\t\t{\r\n\t\t\tindexToSet = -1;\r\n\t\t}\r\n\t\tvar source = this.__objGrid.__getFlatSource();\r\n\t\tif(source)\r\n\t\t{\r\n\t\t\tvar item = null;\r\n\t\t\tfor(var count = 0; count < source.length; count++) \r\n\t\t\t{\r\n\t\t\t\tvar item = source[count];\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__fieldHover] = (item[this.__fieldIndex] === indexToSet); \r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setVirtualRowHover = function(indexToSet)\r\n\t{\r\n\t\tif(this.__enableVirtualScroll)\r\n\t\t{\r\n\t\t\tif(this.util.isUndefinedOrNull(indexToSet))\r\n\t\t\t{\r\n\t\t\t\tindexToSet = 0;\r\n\t\t\t}\r\n\t\t\tvar item = this.__getVisibleItemByIndex(null,indexToSet);\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tthis.__navigationIndex = indexToSet;\r\n\t\t\t\tvar index = item[this.__fieldIndex];\r\n\t\t\t\tthis.__setVirtualRowHoverField(index);\r\n\t\t\t\tthis.__virtualRowHover();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setRowHover = function(indexToSet)\r\n\t{\r\n\t\tif(this.util.isUndefinedOrNull(indexToSet))\r\n\t\t{\r\n\t\t\tindexToSet = 0;\r\n\t\t}\r\n\t\tif(this.__enableVirtualScroll)\r\n\t\t{\r\n\t\t\tthis.__setVirtualRowHover(indexToSet);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(this.util.isUndefinedOrNull(indexToSet))\r\n\t\t\t{\r\n\t\t\t\tindexToSet = 0;\r\n\t\t\t}\r\n\t\t\tthis.__navigationIndex = indexToSet;\r\n\t\t\tvar listItem = this.__getListItemFromContainer(this.__navigationIndex);\r\n\t\t\tthis.util.addStyleClass(listItem,\"nsListItemHover\");\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__createNoDataRow = function()\r\n\t{\r\n\t\tvar listItem = this.util.createElement(\"li\",null,\"nsListNoRecordsFound\");\r\n\t\tlistItem.setAttribute(\"nsNoData\",\"true\");\r\n\t\tvar textNode = document.createTextNode(this.__noDataMessage);\r\n\t\tlistItem.appendChild(textNode);\r\n\t\treturn listItem;\r\n\t};\r\n\t\r\n\tNSList.prototype.__addListenerForBody = function()\r\n\t{\r\n\t\tif(!this.__keyDownRef)\r\n\t\t{\r\n\t\t\tthis.__keyDownRef = this.__keyDownHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"keydown\",this.__keyDownRef);\r\n\t\t}\r\n\t\tif(!this.__keyUpRef)\r\n\t\t{\r\n\t\t\tthis.__keyUpRef = this.__keyUpHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"keyup\",this.__keyUpRef);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__createList = function(dataSet,startIndex,endIndex)\r\n\t{\r\n\t\tif(dataSet && dataSet.length > 0)\r\n\t    {\r\n\t\t\tthis.__objGrid.__createList(dataSet,startIndex,endIndex);\r\n\t    }\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__listContainer.appendChild(this.__createNoDataRow());\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__createListAt = function(item,index,isResetIndex)\r\n\t{\r\n\t\tif(item && index > -1)\r\n\t    {\r\n\t\t\tthis.__updateItem(item,index,true,isResetIndex);\r\n\t\t\tvar listItem = this.__createListItem(item,false);\r\n\t\t\tthis.__listContainer.insertBefore(listItem, this.__listContainer.childNodes[index]);\r\n\t\t\treturn listItem;\r\n\t    }\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__updateItem = function(item,index,isReset,isResetIndex)\r\n\t{\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\tif(isResetIndex || !item.hasOwnProperty(this.__fieldIndex))\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldIndex] = index;\r\n\t\t\t}\r\n\t\t\tif(isReset || !item.hasOwnProperty(this.__fieldDisableHover))\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldDisableHover] = this.__isHoverDisabled(item);\r\n\t\t\t}\r\n\t\t\tif(isReset || !item.hasOwnProperty(this.__fieldSelected))\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldSelected] = false;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__createListItem = function(item,isAdd)\r\n\t{\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\t if(this.util.isUndefined(isAdd) || isAdd === null)\r\n\t\t\t {\r\n\t\t\t\t isAdd = true;\r\n\t\t\t }\r\n\t\t\t var listItem = this.util.createElement(\"li\",null,\"nsListItem\");\r\n\t\t\t this.__objGrid.__createListItem(listItem,item);\r\n\t\t\t if(this.__enableMouseHover)\r\n\t\t\t {\r\n\t\t\t\t this.util.addEvent(listItem,\"mouseover\",this.__itemMouseOverHandler.bind(this));\r\n\t\t\t\t this.util.addEvent(listItem,\"mouseout\",this.__itemMouseOutHandler.bind(this));\r\n\t\t\t\t if(this.__enableMouseHoverAnimation)\r\n\t\t\t\t {\r\n\t\t\t\t\t this.util.addStyleClass(listItem,\"nsListItemAnimated\");\r\n\t\t\t\t }\r\n\t\t\t\t else\r\n\t\t\t\t {\r\n\t\t\t\t\t this.util.addStyleClass(listItem,\"nsListItemNormal\");\r\n\t\t\t\t }\r\n\t\t\t }\r\n\t\t\t this.util.addEvent(listItem,\"click\",this.__itemClickHandler.bind(this));\r\n\t\t\t this.__setListItemProperties(listItem,item);\r\n\t\t\t if(isAdd)\r\n\t\t\t {\r\n\t\t\t\t this.__listContainer.appendChild(listItem);\r\n\t\t\t }\r\n\t\t\t return listItem;\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__setListItemProperties = function(listItem,item)\r\n\t{\r\n\t\tthis.__objGrid.__setListItemProperties(listItem,item);\r\n\t};\r\n\t\r\n\tNSList.prototype.__addCellText = function(listItem,item,div)\r\n\t{\r\n\t\tvar toolTipText = null;\r\n\t\tif(listItem && item && div)\r\n\t\t{\r\n\t\t\tif(this.__itemRenderer)\r\n\t\t\t{\r\n\t\t\t\tvar objRenderer = this.__itemRenderer(item,this.__labelField,item[this.__fieldIndex],item[this.__fieldDisableHover],listItem);\r\n\t\t\t\tif(objRenderer)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.util.isString(objRenderer))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar compBodySpan = document.createElement(\"span\");\r\n\t\t\t\t\t\tcompBodySpan.innerHTML = objRenderer;\r\n\t\t\t\t\t\tdiv.appendChild(compBodySpan);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdiv.appendChild(objRenderer);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if(this.__template)\r\n\t\t\t{\r\n\t\t\t\tdiv.appendChild(this.__template.cloneNode(true));\r\n\t\t\t\tthis.__setDataInTemplateRenderer(div,item,listItem);\r\n\t\t\t}\r\n\t\t\telse if(this.__labelFunction)\r\n\t\t\t{\r\n\t\t\t\tvar text = this.__labelFunction(item,this.__labelField);\r\n\t\t\t\tdiv.appendChild(document.createTextNode(text));\r\n\t\t\t}\r\n\t\t\telse if(item.hasOwnProperty(this.__labelField) && !this.util.isUndefined(item[this.__labelField]) && item[this.__labelField] != null)\r\n\t\t    {\r\n\t\t\t\tvar text = item[this.__labelField];\r\n\t\t\t\tdiv.appendChild(document.createTextNode(text));\r\n\t\t    }\r\n\t\t\tthis.__highlightDiv(div);\r\n\t\t\tif(this.__toolTipField)\r\n\t\t\t{\r\n\t\t\t\ttoolTipText = item[this.__toolTipField];\r\n\t\t\t}\r\n\t\t\telse if(this.__toolTipRenderer)\r\n\t\t\t{\r\n\t\t\t\ttoolTipText = this.__toolTipRenderer(item,this.__labelField,item[this.__fieldIndex],item[this.__fieldDisableHover],listItem);\r\n\t\t\t}\r\n\t\t\tif(this.__enableTruncateToFit)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(div,\"nsListTruncateToFit\");\r\n\t\t\t\t//This condition is above so that toolTip and title are not set togeather\r\n\t\t\t\tif(!toolTipText || toolTipText === \"\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.__enableToolTipForTruncateText)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttoolTipText = div.textContent;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tdiv.setAttribute(\"title\",div.textContent);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(toolTipText && toolTipText !== \"\")\r\n\t\t\t{\r\n\t\t\t\tthis.__nsToolTipInElement.addToolTip(div,toolTipText);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setDataInTemplateRenderer = function(cellItem,data,listItem)\r\n\t{\r\n\t\tif(cellItem && this.__setData)\r\n\t\t{\r\n\t\t\tthis.__setRendererProperties(cellItem);\r\n\t\t\tthis.__setRendererInData(cellItem,data,listItem);\r\n\t\t\t//IE bug\r\n\t\t\tcellItem.data = data;\r\n\t\t\tif(this.util.isFunction(this.__setData))\r\n\t\t    {\r\n\t\t\t\tvar strParam = \"(cellItem,data,dataField,isDisabled,listItem)\"; \r\n\t\t    \tif(this.util.isString(this.__setData))\r\n\t\t    \t{\r\n\t\t    \t\tvar base = this;\r\n\t\t    \t\tthis.util.callFunctionFromString(this.__setData + strParam,function(paramValue){\r\n\t\t\t\t\t\tif(paramValue === \"cellItem\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn cellItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(paramValue === \"data\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn data;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(paramValue === \"dataField\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn base.__labelField;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(paramValue === \"isDisabled\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn data[base.__fieldDisableHover];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(paramValue === \"listItem\")\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\treturn listItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn paramValue;\r\n\t\t\t\t\t});\r\n\t\t    \t}\r\n\t\t    \telse\r\n\t\t    \t{\r\n\t\t    \t\tthis.__setData(cellItem,data,this.__labelField,data[this.__fieldDisableHover],listItem);\r\n\t\t    \t}\r\n\t\t    }\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setRendererInData = function(cellItem,data,listItem)\r\n\t{\r\n\t\tif(cellItem)\r\n\t\t{\r\n\t\t\tvar compChild = null;\r\n\t\t\tfor(var count = 0; count < cellItem.children.length; count++) \r\n\t\t\t{\r\n\t\t\t\tcompChild = cellItem.children[count];\r\n\t\t\t\tif(compChild)\r\n\t\t\t\t{\r\n\t\t\t\t\tcompChild.data = data;\r\n\t\t\t\t\tcompChild.listItem = listItem;\r\n\t\t\t\t}\r\n\t\t\t\t//IE 9 Bug,you got to assign it back\r\n\t\t\t\t//listItem.children[count] = compChild;\r\n\t\t\t\tthis.__setRendererInData(compChild,data,listItem);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setRendererProperties = function(cellItem)\r\n\t{\r\n\t\tif(cellItem)\r\n\t\t{\r\n\t\t\tvar compChild = null;\r\n\t\t\tfor(var count = 0; count < cellItem.children.length; count++) \r\n\t\t\t{\r\n\t\t\t\tcompChild = cellItem.children[count];\r\n\t\t\t\tvar grid = this;\r\n\t\t\t\tArray.prototype.slice.call(compChild.attributes).forEach(function(attribute) \r\n\t\t\t\t{\r\n\t\t\t        if(grid.util.isFunction(attribute.value))\r\n\t\t\t        {\r\n\t\t\t        \tvar newValue = attribute.value + \"(this)\";\r\n\t\t\t        \tcompChild.removeAttribute(attribute.name);\r\n\t\t\t\t\t\tcompChild.setAttribute(attribute.name,newValue);\r\n\t\t\t        }\r\n\t\t\t\t});\r\n\t\t\t\tif(compChild)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(compChild.hasAttribute(\"accessor-name\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcellItem[compChild.getAttribute(\"accessor-name\")] = compChild;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tthis.__setRendererProperties(compChild);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setTemplate = function()\r\n\t{\r\n\t\tif(this.__templateID)\r\n\t\t{\r\n\t\t\tthis.__template = this.util.getTemplate(this.__templateID);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__isHoverDisabled = function(item)\r\n\t{\r\n\t\tif(this.__disableHoverField)\r\n\t\t{\r\n\t\t\treturn Boolean.parse(item[this.__disableHoverField]);\r\n\t\t}\r\n\t\tif(this.__disableHoverFunction)\r\n\t\t{\r\n\t\t\treturn Boolean.parse(this.__disableHoverFunction(item,this.__fieldIndex));\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\tNSList.prototype.__itemClickHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t    var target = this.util.getTarget(event);\r\n\t    target = this.util.findParent(target,\"li\");\r\n\t    var index = this.__getIndexFromTarget(target);\r\n\t    this.__setIndex(index,false);\r\n\t    this.__lastNavigationDirection = null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__setIndex = function(index,isMultiSelect)\r\n\t{\r\n\t\tif(index > -1)\r\n\t\t{\r\n\t\t\tisMultiSelect = Boolean.parse(isMultiSelect);\r\n\t\t\tif (this.__isShiftPressed && this.__enableMultipleSelection)\r\n\t\t    {\r\n\t\t    \tthis.__multiSectionHandler(index);\r\n\t\t    }\r\n\t\t    else if(isMultiSelect || (this.__isCtrlPressed && this.__enableMultipleSelection))\r\n\t\t    {\r\n\t\t    \tif(this.__isRowSelected(index))\r\n\t\t    \t{\r\n\t\t    \t\tthis.__markRowUnselected(index);\r\n\t\t    \t}\r\n\t\t    \telse\r\n\t\t    \t{\r\n\t\t    \t\tthis.__markRowSelected(index);\r\n\t\t    \t}\r\n\t\t    }\r\n\t\t    else\r\n\t\t    {\r\n\t\t    \tthis.__clearAllRowSelection(false);\r\n\t\t    \tthis.__markRowSelected(index);\r\n\t\t    } \r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__itemMouseOverHandler = function(event)\r\n\t{\r\n\t\t var target = this.util.getTarget(event);\r\n\t     target = this.util.findParent(target,\"li\");\r\n\t     var index = this.__getIndexFromTarget(target);\r\n\t     var item = this.__getItemByIndex(index);\r\n\t     if(target && index > -1 && this.__isMouseHoverAllowed(index))\r\n\t     {\r\n\t    \t this.util.addStyleClass(target,\"nsListItemHover\");\r\n\t    \t this.__navigationIndex = index;\r\n\t    \t this.util.dispatchEvent(this.__baseComponent,this.ITEM_NAVIGATED,item,{index:this.__navigationIndex});\r\n\t     }\r\n\t};\r\n\t\r\n\tNSList.prototype.__itemMouseOutHandler = function(event)\r\n\t{\r\n\t\t var target = this.util.getTarget(event);\r\n\t     target = this.util.findParent(target,\"li\");\r\n\t     if(target)\r\n\t     {\r\n\t    \t this.util.removeStyleClass(target,\"nsListItemHover\");\r\n\t     }\r\n\t};\r\n\t\r\n\tNSList.prototype.__keyDownHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tif(this.hasFocus())\r\n\t\t{\r\n\t\t\tthis.__isShiftPressed = event.shiftKey;\r\n\t\t\tthis.__isCtrlPressed = event.ctrlKey;\r\n\t\t\tvar isShiftCtrlPressed = this.__isShiftPressed || this.__isCtrlPressed;\r\n\t\t\tvar keyCode = this.util.getKeyUnicode(event);\r\n\t\t\tif(this.__enableKeyboardNavigation)\r\n\t\t\t{\r\n\t\t\t\tvar source = this.__objGrid.__getFlatSource();\r\n\t\t\t\t//key Up\r\n\t\t\t\tif(keyCode === this.util.KEYCODE.UP && isShiftCtrlPressed && this.__enableMultipleSelection)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.__lastNavigationDirection && this.__lastNavigationDirection === this.NAVIGATION_DOWN)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn this.__keyBoardSelectionHandler(event,this.NAVIGATION_UP);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(this.__selectedIndex != 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__selectedIndex--;\r\n\t\t\t\t\t\tthis.__navigationIndex--;\r\n\t\t\t\t\t\twhile(!this.__isMouseHoverAllowed(this.__selectedIndex))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.__selectedIndex--;\r\n\t\t\t\t\t\t\tthis.__navigationIndex--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn this.__keyBoardSelectionHandler(event,this.NAVIGATION_UP);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t//key down\r\n\t\t\t\telse if(keyCode === this.util.KEYCODE.DOWN && isShiftCtrlPressed && this.__enableMultipleSelection)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.__lastNavigationDirection && this.__lastNavigationDirection === this.NAVIGATION_UP)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn this.__keyBoardSelectionHandler(event,this.NAVIGATION_DOWN);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(source && this.__selectedIndex != source.length - 1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__selectedIndex++;\r\n\t\t\t\t\t\tthis.__navigationIndex++;\r\n\t\t\t\t\t\twhile(!this.__isMouseHoverAllowed(this.__selectedIndex))\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.__selectedIndex++;\r\n\t\t\t\t\t\t\tthis.__navigationIndex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn this.__keyBoardSelectionHandler(event,this.NAVIGATION_DOWN);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if(keyCode === this.util.KEYCODE.UP)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(source && this.__navigationIndex === -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__navigationIndex = source.length - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(this.__navigationIndex > 0)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn this.__keyBoardNavigationHandler(event,this.NAVIGATION_UP);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if(keyCode === this.util.KEYCODE.DOWN)\r\n\t\t\t\t{\r\n\t\t\t\t\t/*if(this.__navigationIndex === -1)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__navigationIndex = 0;\r\n\t\t\t\t\t}*/\r\n\t\t\t\t\tif(source)//&& this.__navigationIndex < source.length\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn this.__keyBoardNavigationHandler(event,this.NAVIGATION_DOWN);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if(keyCode === this.util.KEYCODE.ENTER)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__clearAllRowSelection(false);\r\n\t\t\t\t\tvar listItem = this.__getkeyboardNavigationListItem();\r\n\t\t\t\t\tif(listItem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__markRowSelected(this.__getIndexFromTarget(listItem));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(keyCode === this.util.KEYCODE.SHIFT)\r\n\t\t\t{\r\n\t\t\t\tthis.util.makeBodyUnselectable();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__keyUpHandler = function(event)\r\n\t{\r\n\t\tif(this.util.getKeyUnicode(event) === this.util.KEYCODE.CTRL)\r\n\t\t{\r\n\t\t\tthis.__isCtrlPressed = false;\r\n\t\t}\r\n\t\tif(this.util.getKeyUnicode(event) === this.util.KEYCODE.SHIFT)\r\n\t\t{\r\n\t\t\tthis.__isShiftPressed = false;\r\n\t\t\tthis.util.makeBodySelectable();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__keyBoardNavigationHandler = function(event,direction)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar lastIndex = this.__navigationIndex;\r\n\t\tvar currentIndex = this.__navigationIndex;\r\n\t\t(direction === this.NAVIGATION_UP) ? currentIndex--:currentIndex++;\r\n\t\twhile(!this.__isMouseHoverAllowed(currentIndex))\r\n\t\t{\r\n\t\t\t(direction === this.NAVIGATION_UP) ? currentIndex--:currentIndex++;\r\n\t\t}\r\n\t\tvar endHandler = function()\r\n\t\t{\r\n\t\t\tself.__navigationIndex = currentIndex;\r\n\t\t\tvar listItem = self.__getkeyboardNavigationListItem();\r\n\t\t\tvar index = -1;\r\n\t\t\tvar item = null;\r\n\t\t\tif(listItem)\r\n\t\t\t{\r\n\t\t\t\tvar source = self.__objGrid.__getFlatSource();\r\n\t\t\t\tindex = self.__getIndexFromTarget(listItem);\r\n\t\t\t\titem = self.__getItemByIndex(index, source);\r\n\t\t\t}\r\n\t\t\tself.util.dispatchEvent(self.__baseComponent,self.ITEM_NAVIGATED,item,{index:index});\r\n\t\t\tself.__lastNavigationDirection = null;\r\n\t\t};\r\n\t\tif(this.__enableVirtualScroll)\r\n\t\t{\r\n\t\t\t\r\n\t\t\tvar virtualHandler = function()\r\n\t\t\t{\r\n\t\t\t\t//self.__setVirtualRowHover.call(self,index);\r\n\t\t\t\tvar item = self.__getVisibleItemByIndex.call(self,null,currentIndex);\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar index = item[self.__fieldIndex];\r\n\t\t\t\t\tself.__setVirtualRowHoverField.call(self,index);\r\n\t\t\t\t\tself.__virtualRowHover.call(self);\r\n\t\t\t\t\tendHandler();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tthis.scrollToIndex(currentIndex,false);\r\n\t\t\t\r\n\t\t\tsetTimeout(function()\r\n\t\t\t{ \r\n\t\t\t\tvirtualHandler();\r\n\t\t\t},0);\r\n\t\t\t//this.__setVirtualRowHover(currentIndex);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar listItem = this.__getListItemFromContainer(lastIndex - this.__startArrayElement);\r\n\t\t\tvar currentListItem = this.__getListItemFromContainer(currentIndex - this.__startArrayElement);\r\n\t\t\t//var listItem = this.__getListItemByIndex(lastIndex - this.__startArrayElement);\r\n\t\t\t//var currentListItem = this.__getListItemByIndex(currentIndex - this.__startArrayElement);\r\n\t\t\tif(currentListItem)\r\n\t\t\t{\r\n\t\t\t\tthis.util.removeStyleClass(listItem,\"nsListItemHover\");\r\n\t\t\t\tthis.util.addStyleClass(currentListItem,\"nsListItemHover\");\r\n\t\t\t\tthis.__refreshScrollPosition(currentListItem,direction);\r\n\t\t\t\tendHandler();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tevent.preventDefault();\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\tNSList.prototype.__keyBoardSelectionHandler = function(event,direction)\r\n\t{\r\n\t\tif(this.__isRowSelected(this.__selectedIndex))\r\n\t\t{\r\n\t\t\tthis.__markRowUnselected(this.__selectedIndex);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__markRowSelected(this.__selectedIndex);\r\n\t\t}\r\n\t\tif(direction === this.NAVIGATION_DOWN)\r\n\t\t{\r\n\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t{\r\n\t\t\t\tthis.scrollToIndex(this.__selectedIndex,false);\r\n\t\t\t}\r\n\t\t\telse if(Math.floor(this.__selectedIndex % this.__pageSize) === 0)\r\n\t\t\t{\r\n\t\t\t\tvar listItem = this.__getListItemByIndex(this.__selectedIndex);\r\n\t\t\t\tthis.__refreshScrollPosition(listItem,this.NAVIGATION_DOWN);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(direction === this.NAVIGATION_UP)\r\n\t\t{\r\n\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t{\r\n\t\t\t\tthis.scrollToIndex(this.__selectedIndex,false);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvar listItem = this.__getListItemByIndex(this.__selectedIndex);\r\n\t\t\t\tthis.__refreshScrollPosition(listItem,this.NAVIGATION_UP);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__lastNavigationDirection = direction;\r\n\t\tevent.preventDefault();\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\tNSList.prototype.__refreshScrollPosition = function(listItem,direction)\r\n\t{\r\n\t\tif(!this.__isElementInView(listItem))\r\n\t\t{\r\n\t\t\tthis.__scrollToListItem(listItem);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__isElementInView = function(listItem)\r\n\t{\r\n\t\tvar cellBottom = 0;\r\n\t    var parentBottom = 0;\r\n\t    var cellTop = 0;\r\n\t    var parentTop = 0;\r\n\t\tif(listItem)\r\n\t\t{\r\n\t\t\tvar scrollParent = this.__divOuterContainer;\r\n\t\t\tvar listChild = listItem.querySelector(\".nsListChild\");\r\n\t\t\tif(scrollParent && listChild)\r\n\t\t\t{\r\n\t\t\t\tvar cellRect = listChild.getBoundingClientRect();\r\n\t            parentTop = 0;\r\n\t            var rectScrollParent = scrollParent.getBoundingClientRect();\r\n\t            parentBottom = rectScrollParent.height;\r\n\t            cellTop =  cellRect.top - rectScrollParent.top;\r\n\t            cellBottom = cellTop + cellRect.height;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn cellBottom <= parentBottom && cellTop >= parentTop;\r\n\t};\r\n\t\r\n\tNSList.prototype.__scrollToListItem = function(listItem)\r\n\t{\r\n\t\tif(listItem)\r\n\t\t{\r\n\t\t\tvar rectCell = listItem.getBoundingClientRect();\r\n\t\t\tvar rectParentContainer = this.__divParentContainer.getBoundingClientRect();\r\n\t        var scrollTop = rectCell.top - rectParentContainer.top;\r\n\t        this.__divOuterContainer.scrollTop = scrollTop;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__getkeyboardNavigationListItem = function()\r\n\t{\r\n\t\tvar listItem = null;\r\n\t\tif(this.__enableVirtualScroll)\r\n\t\t{\r\n\t\t\tlistItem = this.__listContainer.querySelector(\".nsListItemHover\");\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tlistItem = this.__getListItemFromContainer(this.__navigationIndex);\r\n\t\t}\r\n\t\treturn listItem;\r\n\t};\r\n\t\r\n\tNSList.prototype.__isMouseHoverAllowed = function(index)\r\n\t{\r\n\t\tvar item = this.__getItemByIndex(index);\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\treturn !item[this.__fieldDisableHover];\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\tNSList.prototype.__markRowSelected= function(index)\r\n\t{\r\n\t\tif(index > -1)\r\n\t    {\r\n\t        if(!this.__isRowSelected(index))\r\n\t        {\r\n\t        \tthis.__setMultiSelectedVars(index,true);\r\n\t            this.__setValuesForSelectedRow(index);\r\n\t        \tif(this.__enableVirtualScroll)\r\n\t        \t{\r\n\t        \t\tthis.__virtualRowSelection();\r\n\t        \t}\r\n\t        \telse\r\n\t        \t{\r\n\t        \t\tvar listItem = this.__getListItemByIndex(index);\r\n\t            \tthis.util.addStyleClass(listItem,\"nsListItemSelected\"); \r\n\t        \t}\r\n\t        }\r\n\t    }\r\n\t};\r\n\t\r\n\tNSList.prototype.__markRowUnselected = function(index)\r\n\t{\r\n\t    if(this.__isRowSelected(index) && this.__isMouseHoverAllowed(index))\r\n\t    {\r\n\t    \tvar isUnselected = this.__setMultiSelectedVars(index,false);\r\n\t        if(isUnselected)\r\n\t        {\r\n\t        \tthis.__setValuesForUnselectedRow(index);\r\n\t        }\r\n\t        if(this.__enableVirtualScroll)\r\n\t    \t{\r\n\t    \t\tthis.__virtualRowSelection();\r\n\t    \t}\r\n\t    \telse\r\n\t    \t{\r\n\t    \t\tvar listItem = this.__getListItemByIndex(index);\r\n\t    \t\tthis.util.removeStyleClass(listItem,\"nsListItemSelected\");\r\n\t    \t}\r\n\t    }\r\n\t};\r\n\t\r\n\tNSList.prototype.__setValuesForSelectedRow = function(index)\r\n\t{\r\n\t\tif(index > -1 && this.__isMouseHoverAllowed(index))\r\n\t\t{\r\n\t\t\tvar item = this.__getItemByIndex(index);\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldSelected] = true;\r\n\t\t\t    this.__selectedIndex = index;\r\n\t\t\t    this.__navigationIndex = index;\r\n\t\t\t    this.util.dispatchEvent(this.__baseComponent,this.ITEM_SELECTED,item,{index:index});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setValuesForUnselectedRow = function(index)\r\n\t{\r\n\t\tif(index > -1 && this.__isMouseHoverAllowed(index))\r\n\t\t{\r\n\t\t\tvar item = this.__getItemByIndex(index);\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldSelected] = false;\r\n\t\t    \tthis.util.dispatchEvent(this.__baseComponent,this.ITEM_UNSELECTED,item,{index:index});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__clearAllRowSelection = function(setIndexVariables)\r\n\t{\r\n\t\tvar size = this.__selectedIndexes.length;\r\n\t    for (var count = size - 1; count >= 0 ; count--)\r\n\t    {\r\n\t    \tvar index = this.__selectedIndexes[count];\r\n\t        this.__markRowUnselected(index);\r\n\t    }\r\n\t    this.__setMultiSelectedVars(-1,true);\r\n\t    if(setIndexVariables)\r\n\t    {\r\n\t    \tthis.__selectedIndex = -1;\r\n\t        this.__navigationIndex = -1;\r\n\t    }\r\n\t};\r\n\t\r\n\tNSList.prototype.__multiSectionHandler = function(lastIndex)\r\n\t{\r\n\t\t if(lastIndex < 0)\r\n\t\t {\r\n\t\t\t return;\r\n\t\t }\r\n\t\t if (this.__selectedIndexes.length === 0)\r\n\t\t {\r\n\t\t\t this.__isRowSelected(lastIndex);\r\n\t\t     return;\r\n\t\t }\r\n\t\t var firstIndex = this.__selectedIndexes[this.__selectedIndexes.length - 1];\r\n\t\t if(lastIndex === firstIndex)\r\n\t\t {\r\n\t\t\t this.__markRowUnselected(lastIndex);\r\n\t\t\t return;\r\n\t\t }\r\n\t\t var isDown = lastIndex > firstIndex;\r\n\t\t var isSelection = !this.__isRowSelected(lastIndex);\r\n\t\t var counter = firstIndex;\r\n\t\t do\r\n\t\t {\r\n\t\t\t  counter = isDown ? (counter + 1) : (counter - 1);\r\n\t\t\t  if (isSelection)\r\n\t\t\t  {\r\n\t\t\t\t  this.__markRowSelected(counter);\r\n\t\t\t  }\r\n\t\t\t  else\r\n\t\t\t  {\r\n\t\t\t\t  this.__markRowUnselected(counter);\r\n\t\t\t  }\r\n\t\t }\r\n\t\t while(counter != lastIndex);\t \r\n\t};\r\n\t\r\n\tNSList.prototype.__setMultiSelectedVars = function(index,add)\r\n\t{\r\n\t\tif(index === -1)\r\n\t\t{\r\n\t\t\tthis.__selectedItems = [];\t\r\n\t\t\tthis.__selectedIndexes = [];\t\r\n\t\t}\r\n\t\telse if(add)\r\n\t\t{\r\n\t\t\tvar data = this.__getItemByIndex(index);\r\n\t\t\tthis.__selectedItems.push(data);\r\n\t\t\tthis.__selectedIndexes.push(index);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tvar isUnselected = false;\r\n\t\t\tfor (var count= 0; count < this.__selectedIndexes.length ; count++)\r\n\t        {\r\n\t            if (this.__selectedIndexes[count] === index)\r\n\t            {\r\n\t                this.__selectedItems.splice(count,1);\r\n\t                this.__selectedIndexes.splice(count,1);\r\n\t                isUnselected = true;\r\n\t                break;\r\n\t            }\r\n\t        }\r\n\t\t\treturn isUnselected;\r\n\t\t}\r\n\t\t\r\n\t\treturn true;\r\n\t};\r\n\t\r\n\tNSList.prototype.__isRowSelected= function(index)\r\n\t{\r\n\t    if(index > -1)\r\n\t    {\r\n\t    \tvar item = this.__getItemByIndex(index);\r\n\t    \tif(item)\r\n\t    \t{\r\n\t    \t\treturn item[this.__fieldSelected];\r\n\t    \t}\r\n\t    }   \r\n\t    return false;\r\n\t};\r\n\t\r\n\t/******************************************************Start of Context Menu*************************************************************/\r\n\tNSList.prototype.__initializeContextMenu = function()\r\n\t{\r\n\t\t//if(!this.__contextMenu)\r\n\t\t//{\r\n\t\t\tvar contextMenuSetting = {parent:this.__listContainer,isContextMenu:true,createRunTime:true,sourceProvider:this.__getContextMenuDataProvider.bind(this),targetType:\"LI\"};\r\n\t\t\tif(this.__contextMenuSetting)\r\n\t\t\t{\r\n\t\t\t\tfor(var key in this.__contextMenuSetting)\r\n\t\t\t\t{\r\n\t\t\t\t\t//grid setting should not be overriden by the users\r\n\t\t\t\t\tif(!contextMenuSetting[key])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcontextMenuSetting[key] = this.__contextMenuSetting[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.__contextMenu = new NSMenu(contextMenuSetting);\r\n\t\t//}\r\n\t};\r\n\t\r\n\tNSList.prototype.__getContextMenuDataProvider = function(listItem)\r\n\t{\r\n\t\tif(listItem)\r\n\t\t{\r\n\t\t\tlistItem = this.util.findParent(listItem,\"LI\");\r\n\t\t\tif(listItem)\r\n\t\t\t{\r\n\t\t\t\tvar index = this.__getIndexFromTarget(listItem);\r\n\t\t\t\tvar item = this.__getItemByIndex(index);\r\n\t\t\t\tif(item && this.__contextMenuProvider) \r\n\t\t\t\t{\r\n\t\t\t\t\treturn this.__contextMenuProvider(item,index);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t/******************************************************End of Context Menu*************************************************************/\r\n\t/******************************Custom Function *************************************/\r\n\tNSList.prototype.__getIndexFromTarget = function(target)\r\n\t{\r\n\t\tif(target)\r\n\t\t{\r\n\t\t\treturn parseInt(target.getAttribute(\"ns-index\"));\r\n\t\t}\r\n\t\treturn -1;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getListItemFromItem = function(item)\r\n\t{\r\n\t\tvar listItem = null;\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\tlistItem = item[this.__fieldItem];\r\n\t\t\tvar index = item[this.__fieldIndex];\r\n\t\t\t//below case is true if row reference has been removed due to virtual scroll \r\n\t\t\tvar listItemRawIndex = this.__getListItemRawIndex(listItem); \r\n\t\t\tif(!listItem || listItemRawIndex === -1)\r\n\t\t\t{\r\n\t\t\t\tvar arrListItem = this.__listContainer.querySelectorAll('[ns-index=\"' + index + '\"]');\r\n\t\t\t\tif(arrListItem && arrListItem.length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tlistItem = arrListItem[0];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn listItem;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getListItemByIndex = function(index)\r\n\t{\r\n\t\tif(index > -1)\r\n\t    {\r\n\t    \tvar item = this.__getItemByIndex(index);\r\n\t    \tif(item)\r\n\t    \t{\r\n\t    \t\treturn item[this.__fieldItem];\r\n\t    \t}\r\n\t    }   \r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getListItemFromContainer = function(index)\r\n\t{\r\n\t\tif(this.__listContainer.children.length > index)\r\n\t\t{\r\n\t\t\treturn this.__listContainer.children[index];\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getItemByIndex = function(indexToFind,source)\r\n\t{\r\n\t\tif(!source)\r\n\t\t{\r\n\t\t\tsource = this.__objGrid.__getFlatSource();\r\n\t\t}\r\n\t\tif(source && source.length > 0)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < source.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar item = source[count];\r\n\t\t\t\tif(item && item[this.__fieldIndex] === indexToFind)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn item;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getIndexByItem = function(itemToFind,source)\r\n\t{\r\n\t\tif(!source)\r\n\t\t{\r\n\t\t\tsource = this.__objGrid.__getFlatSource();\r\n\t\t}\r\n\t\tif(itemToFind && source && source.length > 0)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < source.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar item = source[count];\r\n\t\t\t\tif(item && item[this.__fieldIndex] === itemToFind[this.__fieldIndex])\r\n\t\t\t\t{\r\n\t\t\t\t\treturn item[this.__fieldIndex];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t};\r\n\t\r\n\tNSList.prototype.__addItem = function(arrItem,atIndex)\r\n\t{\r\n\t\tvar flatSource = this.__objGrid.__getFlatSource();\r\n\t\tif(this.util.isUndefined(atIndex) || atIndex === null)\r\n\t\t{\r\n\t\t\tatIndex = flatSource.length;\r\n\t\t}\r\n\t\tif(arrItem && arrItem.length > 0)\r\n\t\t{\r\n\t\t\tif(this.__listContainer && this.__listContainer.children && this.__listContainer.children.length > 0 && this.__listContainer.children.length < 3)\r\n\t\t\t{\r\n\t\t\t\tfor(var count = 0;count < this.__listContainer.children.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar listItem = this.__listContainer.children[count];\r\n\t\t\t\t\tif(listItem.hasAttribute(\"nsNoData\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__listContainer.removeChild(listItem);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(!this.__addRemoveRowCallInternal)\r\n\t   \t \t{\r\n\t\t\t\tthis.__objGrid.__setWrapperSource(arrItem,atIndex,-1,0,true);\r\n\t   \t \t};\r\n\t\t\tvar item = null;\r\n\t\t\tvar length = arrItem.length;\r\n\t\t\tvar index = -1;\r\n\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\titem = arrItem[count];\r\n\t\t\t\tindex = atIndex + count;\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__dataSource.splice(index, 0, item);\r\n\t\t\t\t\tthis.__arrWrapper.splice(index, 0, item);\r\n\t\t\t\t\tthis.__arrInternalSource.splice(index, 0, item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t/*flatSource = this.__objGrid.__getFlatSource();\r\n\t\t\tthis.__updateSourceIndex(flatSource);*/\r\n\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\titem = arrItem[count];\r\n\t\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t\t{\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__createListAt(item,item[this.__fieldIndex]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__moveItem = function(arrItem,toIndex)\r\n\t{\r\n\t\tif(arrItem && arrItem.length > 0 && !this.util.isUndefined(toIndex) && toIndex !== null)\r\n\t\t{\r\n\t\t\tvar item = null;\r\n\t\t\tvar length = arrItem.length;\r\n\t\t\tvar index = -1;\r\n\t\t\tvar fromIndex = -1;\r\n\t\t\tvar listContainer = this.__listContainer;\r\n\t\t\tvar listItem = null;\r\n\t\t\tfor(var count = length - 1;count >= 0;count--)\r\n\t\t\t{\r\n\t\t\t\titem = arrItem[count];\r\n\t\t\t\tindex = toIndex + count;\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tfromIndex = item[this.__fieldIndex];\r\n\t\t\t\t\tthis.util.moveArrayItem(this.__dataSource,fromIndex,index);\r\n\t\t\t\t\tthis.util.moveArrayItem(this.__arrWrapper,fromIndex,index);\r\n\t\t\t\t\tthis.util.moveArrayItem(this.__arrInternalSource,fromIndex,index);\r\n\t\t\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// donot use item[this.__fieldItem] for getting listItem as after de-serialization the reference get lost \r\n\t\t\t\t\t\t// hence getting the item back from dataSource\r\n\t\t\t\t\t\titem = this.__getItemByIndex(fromIndex);\r\n\t\t\t\t\t\tlistItem = item[this.__fieldItem];\r\n\t\t\t\t\t\tif(listItem)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif(listItem.parentNode === listContainer)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tlistContainer.removeChild(listItem);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tindex = (index === 0) ? index : (index - 1);\r\n\t\t\t\t\t\t\tlistContainer.insertBefore(listItem, listContainer.children[index]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__updateSourceIndex = function(source)\r\n\t{\r\n\t\tif(!source)\r\n\t\t{\r\n\t\t\tsource = this.__getAllItems();\r\n\t\t}\r\n\t\tvar item = null;\r\n\t\tvar listItem = null;\r\n\t\tvar length = source.length;\r\n\t\tfor(var count = 0;count < length;count++)\r\n\t\t{\r\n\t\t\titem = source[count];\r\n\t\t\tvar index = this.__enableHierarchical ? (count + 1) : count;\r\n\t\t\titem[this.__fieldIndex] = index;\r\n\t\t\tlistItem = item[this.__fieldItem];\r\n\t\t\tif(listItem && this.util.isElementOfType(listItem,\"li\"))\r\n\t\t\t{\r\n\t\t\t\tlistItem.setAttribute(\"ns-index\",index);\r\n\t\t\t\tvar compArrow = listItem.querySelector(\".nsListArrow\");\r\n\t\t\t\tif(compArrow)\r\n\t\t\t\t{\r\n\t\t\t\t\tcompArrow.setAttribute(\"ns-parent-row-count\",index);\r\n\t\t\t\t\tvar arrowID = this.getID() + \"compArrow\" + index;\r\n\t\t\t\t\tcompArrow.setAttribute(\"id\",arrowID);\r\n\t\t\t\t\tvar compSvg = compArrow.querySelector(\"svg\");\r\n\t\t\t\t\tif(compSvg)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar svgID = arrowID + \"svg\";\r\n\t\t\t\t\t\tcompSvg.setAttribute(\"id\",svgID);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar compUse = compArrow.querySelector(\"use\");\r\n\t\t\t\t\tif(compUse)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar useID = arrowID + \"use\";\r\n\t\t\t\t\t\tcompUse.setAttribute(\"id\",useID);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__createArrow = function(item,parentRowCount,parentElement,isCollapsed)\r\n\t{\r\n\t\t if(parentElement)\r\n\t\t {\r\n\t\t\t var cellArrowParent = this.util.createDiv(null,\"nsListArrowParent\");\r\n\t\t\t var arrowID = this.getID() + \"compArrow\" + parentRowCount;\r\n\t\t\t var compArrow = this.util.createDiv(arrowID,\"nsListArrow\");\r\n\t\t\t compArrow.style.paddingTop = \"3px\";\r\n\t\t\t compArrow.setAttribute(\"ns-parent-row-count\",parentRowCount);\r\n\t\t\t \r\n\t\t\t var objSVG = new NSSvg();\r\n\t\t\t this.__objGrid.__createArrow(compArrow,objSVG,arrowID,isCollapsed);\r\n\t\t\t this.util.addEvent(compArrow,\"click\",this.__arrowClickHandler.bind(this));\r\n\t\t\t cellArrowParent.appendChild(compArrow);\r\n\t\t\t parentElement.appendChild(cellArrowParent);\r\n\t\t\t item[this.__fieldItemArrow] = compArrow;\r\n\t\t\t return compArrow;\r\n\t\t }\r\n\t\t return null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__setArrowDirection = function(compArrow,isCollapsed)\r\n\t{\r\n\t\tif(compArrow)\r\n\t\t{\r\n\t\t\tvar objSVG = new NSSvg();\r\n\t\t\tvar useID = compArrow.getAttribute(\"id\") + \"use\";\r\n\t\t\tthis.__objGrid.__setArrowDirection(objSVG,useID,isCollapsed);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__isArrowCollapsed = function(compArrow)\r\n\t{\r\n\t\tif(compArrow && compArrow.hasAttribute(\"ns-parent-row-count\"))\r\n\t\t{\r\n\t\t\tvar rowIndex = parseInt(compArrow.getAttribute(\"ns-parent-row-count\"));\r\n\t\t\tvar item = this.__getItemByIndex(rowIndex);\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\treturn item[this.__fieldIsCollapsed];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t\r\n\tNSList.prototype.__arrowClickHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tvar target = this.util.getTarget(event);\r\n\t\ttarget = this.util.findParent(target,\"DIV\");\r\n\t\tif(target && target.hasAttribute(\"ns-parent-row-count\"))\r\n\t\t{\r\n\t\t\tvar rowIndex = target.getAttribute(\"ns-parent-row-count\");\r\n\t\t\tvar isCollapse = this.__isArrowCollapsed(target);\r\n\t\t\trowIndex = parseInt(rowIndex);\r\n\t\t\tif(rowIndex > -1)\r\n\t\t\t{\r\n\t\t\t\tvar item = this.__getItemByIndex(rowIndex);\r\n\t\t\t\tif(item[this.__childField]  && item[this.__childField].length > 0)\r\n\t\t        {\r\n\t\t\t\t\tthis.__showHideRow(rowIndex,target,!isCollapse);\r\n\t\t        }\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__objGrid.__handleOnDemandClick(item,event);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tevent.stopImmediatePropagation();\r\n\t};\r\n\t\r\n\tNSList.prototype.__expandCollapseAll = function(isCollapse)\r\n\t{\r\n\t\tif(!this.__enableVirtualScroll && this.__getTotalListItems() < this.__totalRecords)\r\n\t\t{\r\n\t\t\tthis.util.warning(\"nsList\",\"Please let all the items to render.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar dataSource = this.__arrInternalSource;\r\n\t\tif(dataSource && dataSource.length > 0)\r\n\t\t{\r\n\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t{\r\n\t\t\t\tthis.__expandCollapseAllVirtual(dataSource,isCollapse);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__expandCollapseAllNormal(dataSource,isCollapse);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__expandCollapseAllNormal = function(dataSource,isCollapse)\r\n\t{\r\n\t\tfor(var count = 0;count < dataSource.length;count++)\r\n\t\t{\r\n\t\t\tvar item = dataSource[count];\r\n\t\t\t//setting __fieldIsCollapsed here assuming that __showHideAllArrows() will be called after this function\r\n\t\t\titem[this.__fieldIsCollapsed] = isCollapse;\r\n\t\t\tif(parseInt(item[this.__fieldItemLevel]) > 0)\r\n\t\t\t{\r\n\t\t\t\tvar row = item[this.__fieldItem];\r\n\t\t\t\tif(isCollapse)\r\n\t\t\t\t{\r\n\t\t\t\t\trow.style.display = \"none\";\r\n\t\t\t\t\titem[this.__fieldItemVisible] = false;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\trow.style.display = \"\";\r\n\t\t\t\t\titem[this.__fieldItemVisible] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__showHideAllArrows(isCollapse);\r\n\t};\r\n\t\r\n\tNSList.prototype.__expandCollapseAllVirtual = function(dataSource,isCollapse)\r\n\t{\r\n\t\tfor(var count = 0;count < dataSource.length;count++)\r\n\t\t{\r\n\t\t\tvar item = dataSource[count];\r\n\t\t\t//setting __fieldIsCollapsed here assuming that __showHideAllArrows() will be called after this function\r\n\t\t\titem[this.__fieldIsCollapsed] = isCollapse;\r\n\t\t\tif(parseInt(item[this.__fieldItemLevel]) > 0)\r\n\t\t\t{\r\n\t\t\t\tif(isCollapse)\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__fieldItemVisible] = false;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__fieldItemVisible] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.__showHideAllArrows(isCollapse);\r\n\t\tthis.__updateVisibleIndex(null,0);\r\n\t\tthis.__setNSVirtualScroll(this.__arrInternalSource);\r\n\t};\r\n\t\r\n\tNSList.prototype.__showHideRow = function(rowIndex,compArrow,isCollapse)\r\n\t{\r\n\t\tif(rowIndex > -1)\r\n\t\t{\r\n\t\t\tvar item = this.__getItemByIndex(rowIndex);\r\n\t\t\tif(!compArrow)\r\n\t\t\t{\r\n\t\t\t\tcompArrow = this.__getArrow(item[this.__fieldIndex]);\r\n\t\t\t}\r\n\t\t\tvar rowLevel = parseInt(item[this.__fieldItemLevel]);\r\n\t\t\tvar arrChildItems = [];\r\n\t\t\tif(item && item[this.__fieldHasChild])\r\n\t\t\t{\r\n\t\t\t\tvar startIndex = 0;\r\n\t\t\t\tif(isCollapse)\r\n\t\t\t\t{\r\n\t\t\t\t\tarrChildItems = this.__arrInternalSource;\r\n\t\t\t\t\tstartIndex = rowIndex;\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tarrChildItems = this.__getImmediateChildItems(arrChildItems, item);\r\n\t\t\t\t}\r\n\t\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__showHideRowVirtual(item,arrChildItems,startIndex,rowLevel,isCollapse);\r\n\t\t\t\t\titem[this.__fieldIsCollapsed] = isCollapse;\r\n\t\t\t\t\t//this.__updateItemInSource(item);\r\n\t\t\t\t\tthis.__setNSVirtualScroll(this.__arrInternalSource);\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__showHideRowNormal(item,arrChildItems,startIndex,rowLevel,isCollapse);\r\n\t\t\t\t\tthis.__setArrowDirection(compArrow,isCollapse);\r\n\t\t\t\t\titem[this.__fieldIsCollapsed] = isCollapse;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__showHideRowNormal = function(item,arrChildItems,startIndex,rowLevel,isCollapse)\r\n\t{\r\n\t\tif(arrChildItems && arrChildItems.length > 0)\r\n\t\t{\r\n\t\t\tif(isCollapse)\r\n\t\t\t{\r\n\t\t\t\tvar retIndex = this.__getActualIndex(arrChildItems,startIndex);\r\n\t\t\t\tif(retIndex !== startIndex)\r\n\t\t\t\t{\r\n\t\t\t\t\tstartIndex = (retIndex + 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar rowItem = null;\r\n\t\t\tfor(var count = startIndex;count < arrChildItems.length;count++)\r\n\t\t\t{\r\n\t\t\t\trowItem = arrChildItems[count];\r\n\t\t\t\tvar row = rowItem[this.__fieldItem];\r\n\t\t\t\tif(!row)\r\n\t\t\t\t{\r\n\t\t\t\t\trow = this.__createListAt(rowItem,rowItem[this.__fieldIndex] - 1,false);\r\n\t\t\t\t\trowItem[this.__fieldItem] = row;\r\n\t\t\t\t\tthis.__updateSourceIndex();\r\n\t\t\t\t}\r\n\t\t\t\tif(isCollapse)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(rowLevel >= parseInt(rowItem[this.__fieldItemLevel]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\trow.style.display = \"none\";\r\n\t\t\t\t\trowItem[this.__fieldItemVisible] = false;\r\n\t\t\t\t\tif(rowItem[this.__fieldHasChild])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trowItem[this.__fieldIsCollapsed] = true;\r\n\t\t\t\t\t\tif(rowItem[this.__fieldItemArrow])\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar divArrow = rowItem[this.__fieldItemArrow];\r\n\t\t\t\t\t\t\tif(divArrow)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.__setArrowDirection(divArrow,true);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\trow.style.display = \"\";\r\n\t\t\t\t\trowItem[this.__fieldItemVisible] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__showHideRowVirtual = function(item,arrChildItems,startIndex,rowLevel,isCollapse)\r\n\t{\r\n\t\tif(arrChildItems && arrChildItems.length > 0)\r\n\t\t{\r\n\t\t\tif(isCollapse)\r\n\t\t\t{\r\n\t\t\t\tvar retIndex = this.__getActualIndex(arrChildItems,startIndex);\r\n\t\t\t\tif(retIndex !== startIndex)\r\n\t\t\t\t{\r\n\t\t\t\t\tstartIndex = (retIndex + 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfor(var count = startIndex;count < arrChildItems.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar rowItem = arrChildItems[count];\r\n\t\t\t\tif(isCollapse)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(rowLevel >= parseInt(rowItem[this.__fieldItemLevel]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\trowItem[this.__fieldItemVisible] = false;\r\n\t\t\t\t\tif(rowItem[this.__fieldHasChild])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trowItem[this.__fieldIsCollapsed] = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\trowItem[this.__fieldItemVisible] = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar index = item[this.__fieldIndex];\r\n\t\t\tthis.__updateVisibleIndex(null,index - 1);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__showHideAllArrows = function(isCollapse)\r\n\t{\r\n\t\tvar arrDivs = this.__getAllArrows();\r\n\t\tif(arrDivs && arrDivs.length > 0)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < arrDivs.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar div = arrDivs[count];\r\n\t\t\t\tif(div && div.hasAttribute(\"ns-parent-row-count\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__setArrowDirection(div,isCollapse);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__getAllItems = function()\r\n\t{\r\n\t\treturn this.__objGrid.__getFlatSource();\r\n\t};\r\n\t\r\n\tNSList.prototype.__updateListItemText = function(listItem,item,index)\r\n\t{\r\n\t\treturn this.__objGrid.__updateListItemText(listItem,item,index);\r\n\t};\r\n\t\r\n\tNSList.prototype.__getImmediateChildItems = function(arrItems,item)\r\n\t{\r\n\t\tif(!arrItems)\r\n\t\t{\r\n\t\t\tarrItems = [];\r\n\t\t}\r\n\t\tif(item && item[this.__fieldHasChild])\r\n\t\t{\r\n\t\t\tvar arrChild = this.__arrInternalSource;\r\n\t\t\tvar rowLevel = parseInt(item[this.__fieldItemLevel]);\r\n\t\t\tvar startIndex = item[this.__fieldIndex];\r\n\t\t\tvar retIndex = this.__getActualIndex(arrChild,startIndex);\r\n\t\t\tif(retIndex !== startIndex)\r\n\t\t\t{\r\n\t\t\t\tstartIndex = (retIndex + 1);\r\n\t\t\t}\r\n\t\t\tvar length = arrChild.length;\r\n\t\t\tfor(var count = startIndex;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar itemChild = arrChild[count];\r\n\t\t\t\tvar childRowLevel = parseInt(itemChild[this.__fieldItemLevel]);\r\n\t\t\t\tif(rowLevel >= childRowLevel)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif((rowLevel + 1) === childRowLevel)\r\n\t\t\t\t{\r\n\t\t\t\t\tarrItems.push(itemChild);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn arrItems;\r\n\t};\r\n\t\r\n\t//generally used for Filter condition\r\n\tNSList.prototype.__getActualIndex = function(arrChild,startIndex,addCompareOne)\r\n\t{\r\n\t\t//(startIndex + 1) as __fieldIndex starts from 1\r\n\t\t//if(arrChild && arrChild.length < startIndex || arrChild[startIndex][this.__fieldIndex] !== (startIndex + 1))\r\n\t\tif(arrChild && arrChild.length > startIndex && arrChild[startIndex][this.__fieldIndex] !== (startIndex + 1))\r\n\t\t{\r\n\t\t\tvar compareIndex = startIndex;\r\n\t\t\tif(addCompareOne)\r\n\t\t\t{\r\n\t\t\t\tcompareIndex += 1;\r\n\t\t\t}\r\n\t\t\tvar rowItem = null;\r\n\t\t\tfor(var count = 0;count < arrChild.length;count++)\r\n\t\t\t{\r\n\t\t\t\trowItem = arrChild[count];\r\n\t\t\t\tif(rowItem[this.__fieldIndex] === compareIndex)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn count;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn startIndex;\r\n\t};\r\n\t\r\n\t\r\n\tNSList.prototype.__getAllChildItems = function(arrItems,item)\r\n\t{\r\n\t\tif(!arrItems)\r\n\t\t{\r\n\t\t\tarrItems = [];\r\n\t\t}\r\n\t\tif(item && item[this.__fieldHasChild])\r\n\t\t{\r\n\t\t\tvar arrChild = this.__arrInternalSource;\r\n\t\t\tvar rowLevel = parseInt(item[this.__fieldItemLevel]);\r\n\t\t\tvar startIndex = item[this.__fieldIndex];\r\n\t\t\tvar length = arrChild.length;\r\n\t\t\tfor(var count = startIndex;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar itemChild = arrChild[count];\r\n\t\t\t\tif(rowLevel >= parseInt(itemChild[this.__fieldItemLevel]))\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tarrItems.push(itemChild);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn arrItems;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getAllVisibleItems = function()\r\n\t{\r\n\t\tvar totalRecords = 0;\r\n\t\tvar arrItems = this.__getAllItems();\r\n\t\tif(arrItems && arrItems.length > 0)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < arrItems.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar item = arrItems[count];\r\n\t\t\t\tif(item && item[this.__fieldItemVisible])\r\n\t\t\t\t{\r\n\t\t\t\t\ttotalRecords += 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn totalRecords;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getFirstVisibleItemBeforeIndex = function(itemIndex)\r\n\t{\r\n\t\tvar arrItems = this.__getAllItems();\r\n\t\tif(arrItems && arrItems.length > 0)\r\n\t\t{\r\n\t\t\tvar retIndex = this.__getActualIndex(arrItems,itemIndex);\r\n\t\t\tif(retIndex !== itemIndex)\r\n\t\t\t{\r\n\t\t\t\titemIndex = (retIndex + 1);\r\n\t\t\t}\r\n\t\t\tfor(var count = itemIndex;count >= 0;count--)\r\n\t\t\t{\r\n\t\t\t\tvar item = arrItems[count];\r\n\t\t\t\tif(item && item[this.__fieldItemVisible] && item[this.__fieldVisibleIndex] > -1)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn item;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getVisibleItemByIndex = function(source,index)\r\n\t{\r\n\t\tvar arrItems = source;\r\n\t\tif(!arrItems)\r\n\t\t{\r\n\t\t\tarrItems = this.__getAllItems();\r\n\t\t}\r\n\t\tif(arrItems && arrItems.length > 0)\r\n\t\t{\r\n\t\t\tvar self = this; \r\n\t\t\tvar findItem = function(itemCompare)\r\n\t\t\t{\r\n\t\t\t\t return (itemCompare[self.__fieldVisibleIndex] === (index + 1));\r\n\t\t\t};\r\n\t\t\treturn arrItems.find(findItem);\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__updateVisibleIndex = function(source,fromIndex)\r\n\t{\r\n\t\tvar arrItems = source;\r\n\t\tif(!arrItems)\r\n\t\t{\r\n\t\t\tarrItems = this.__getAllItems();\r\n\t\t}\r\n\t\tif(this.util.isUndefinedOrNull(fromIndex))\r\n\t\t{\r\n\t\t\tfromIndex = 0;\r\n\t\t}\r\n\t\tif(arrItems && arrItems.length > 0)\r\n\t\t{\r\n\t\t\tvar visibleRowIndex = 1;\r\n\t\t\tif(fromIndex > 0)\r\n\t\t\t{\r\n\t\t\t\tvar visibleItem = this.__getFirstVisibleItemBeforeIndex(fromIndex);\r\n\t\t\t\tif(visibleItem)\r\n\t\t\t\t{\r\n\t\t\t\t\tvisibleRowIndex = visibleItem[this.__fieldVisibleIndex];\r\n\t\t\t\t\tfromIndex = visibleItem[this.__fieldIndex] - 1;\r\n\t\t\t\t\tvar retIndex = this.__getActualIndex(arrItems,fromIndex,true);\r\n\t\t\t\t\tif(retIndex !== fromIndex)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfromIndex = retIndex;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar length = arrItems.length;\r\n\t\t\tvar item = null;\r\n\t\t\tfor(var count = fromIndex; count < length; count++)\r\n\t\t\t{\r\n\t\t\t\titem = arrItems[count];\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(item[this.__fieldItemVisible])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[this.__fieldVisibleIndex] = visibleRowIndex;\r\n\t\t\t\t\t\tvisibleRowIndex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[this.__fieldVisibleIndex] = -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__updateVisibleIndexByListItem = function(source,arrAllItems)\r\n\t{\r\n\t\tif(source)\r\n\t\t{\r\n\t\t\tvar arrItems = arrAllItems;\r\n\t\t\tif(!arrItems)\r\n\t\t\t{\r\n\t\t\t\tarrItems = this.__getAllItems();\r\n\t\t\t}\r\n\t\t\tvar length = source.length;\r\n\t\t\tvar item = null;\r\n\t\t\tvar objVisibleIndex = {};\r\n\t\t\tfor(var count = 0; count < length; count++)\r\n\t\t\t{\r\n\t\t\t\titem = source[count];\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar index = item[this.__fieldIndex];\r\n\t\t\t\t\tobjVisibleIndex[index] = \"NSList\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(arrItems && arrItems.length > 0)\r\n\t\t\t{\r\n\t\t\t\tlength = arrItems.length;\r\n\t\t\t\titem = null;\r\n\t\t\t\tvar visibleRowIndex = 1;\r\n\t\t\t\tfor(var count = 0; count < length; count++)\r\n\t\t\t\t{\r\n\t\t\t\t\titem = arrItems[count];\r\n\t\t\t\t\tvar index = item[this.__fieldIndex];\r\n\t\t\t\t\tif(this.util.isUndefinedOrNull(objVisibleIndex[index]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[this.__fieldVisibleIndex] = -1;\r\n\t\t\t\t\t\titem[this.__fieldItemVisible] = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[this.__fieldVisibleIndex] = visibleRowIndex;\r\n\t\t\t\t\t\titem[this.__fieldItemVisible] = true;\r\n\t\t\t\t\t\tvisibleRowIndex++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__updateIndexForAllItems = function(source)\r\n\t{\r\n\t\tif(!source)\r\n\t\t{\r\n\t\t\tsource = this.__getAllItems();\r\n\t\t}\r\n\t\tvar length = source.length;\r\n\t\tvar item = null;\r\n\t\tfor(var count = 0; count < length; count++)\r\n\t\t{\r\n\t\t\titem = source[count];\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldIndex] = count;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__getArrow = function(rowCount)\r\n\t{\r\n\t\tvar arrDivs = this.__getAllArrows();\r\n\t\tif(arrDivs && arrDivs.length > 0)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < arrDivs.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar div = arrDivs[count];\r\n\t\t\t\tif(div && div.hasAttribute(\"ns-parent-row-count\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tvar rowParentCount = div.getAttribute(\"ns-parent-row-count\");\r\n\t\t\t\t\tif(rowParentCount && rowParentCount == rowCount)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn div;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getAllArrows = function(divParent)\r\n\t{\r\n\t\tif(!divParent)\r\n\t\t{\r\n\t\t\tdivParent = this.__listContainer;\r\n\t\t}\r\n\t\treturn divParent.querySelectorAll(\".nsListArrow\");\r\n\t};\r\n\t\r\n\tNSList.prototype.__getTotalListItems = function()\r\n\t{\r\n\t\tif(this.__listContainer && this.__listContainer.children)\r\n\t\t{\r\n\t\t\treturn this.__listContainer.children.length;\r\n\t\t}\r\n\t\treturn 0;\r\n\t};\r\n\t\r\n\tNSList.prototype.__updateTotalRecords = function(totalCount)\r\n\t{\r\n\t\tif(this.util.isUndefined(totalCount) || totalCount === null)\r\n\t\t{\r\n\t\t\ttotalCount = this.__arrInternalSource.length; \r\n\t\t}\r\n\t\tthis.__totalRecords = totalCount;\r\n\t};\r\n\t\r\n\tNSList.prototype.__getListItemRawIndex = function(listItem)\r\n\t{\r\n\t\tif(listItem && listItem.parentNode)\r\n\t\t{\r\n\t\t\tvar index = [].slice.call(listItem.parentNode.children).indexOf(listItem);\r\n\t\t\treturn index;\r\n\t\t}\r\n\t\treturn -1;\r\n\t};\r\n\t\r\n\tNSList.prototype.__checkForVirtualMode = function()\r\n\t{\r\n\t\tif(this.__enableVirtualScroll)\r\n\t\t{\r\n\t\t\tif(this.__enablePagination)\r\n\t\t\t{\r\n\t\t\t\tthis.__enableVirtualScroll = false;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSList.prototype.__setVirtualScroll_ScrollTop = function(scrollTop)\r\n\t{\r\n\t\tif(this.__enableCustomScrollBar)\r\n\t\t{\r\n\t\t\tif(this.__scroller)\r\n\t\t\t{\r\n\t\t\t\tthis.__scroller.setScrollTop(scrollTop);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tvar NSFlatList = function(nsList)\r\n\t{\r\n\t\tthis.__nsList = nsList;\r\n\t\tthis.util = nsList.util;\r\n\t\t/********************************Common Functions for Grid ****************************************/\r\n\t\tthis.__initialize = function()\r\n\t\t{\r\n\t\t};\r\n\t\t\r\n\t\tthis.dataSource = function(source)\r\n\t\t{\r\n\t\t\tthis.__nsList.__arrWrapper = this.__nsList.__dataSource.slice(0);\r\n\t\t\tthis.__setWrapperSource(this.__nsList.__arrWrapper,0,-1,0,true);\r\n\t\t\tthis.__nsList.__arrInternalSource = this.__nsList.__arrWrapper.slice(0);\r\n\t\t\tthis.__nsList.__updateTotalRecords();\r\n\t\t};\r\n\t\t\r\n\t\tthis.addItemsAsChildren = function(item,arrChildren)\r\n\t\t{\r\n\t\t};\r\n\t\t\r\n\t\tthis.__setWrapperSource = function(source,offset,parentIndex,level,setFieldIndex)\r\n\t\t{\r\n\t\t\tif(source)\r\n\t\t\t{\r\n\t\t\t\tif(!offset)\r\n\t\t\t\t{\r\n\t\t\t\t\toffset = 0;\r\n\t\t\t\t}\r\n\t\t\t\tvar length = source.length;\r\n\t\t\t\tvar count = 0;\r\n\t\t\t\tvar item = null;\r\n\t\t\t\tvar index = -1; \r\n\t\t\t\tfor (count = 0; count < length; count++) \r\n\t\t\t\t{\r\n\t\t\t\t\titem = source[count];\r\n\t\t\t\t\tindex = offset + count;\r\n\t\t\t\t\tthis.__setItemProperty(item,index,setFieldIndex);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\tthis.__createList= function(dataSet,startIndex,endIndex)\r\n\t\t{\r\n\t\t\tvar item = null;\r\n\t\t\tvar index = -1;\r\n\t\t    for(var count = startIndex; count < endIndex; count++)\r\n\t\t     {\r\n\t    \t\titem = dataSet[count];\r\n\t    \t\tindex =  item[this.__nsList.__fieldIndex];\r\n\t    \t\tthis.__nsList.__updateItem(item,index);\r\n\t    \t\tthis.__nsList.__createListItem(item);\r\n\t\t     }\r\n\t\t};\r\n\t\t\r\n\t\tthis.__createListItem = function(listItem,item)\r\n\t\t{\r\n\t\t};\r\n\t\r\n\t\tthis.__addSVGInPage = function()\r\n\t\t{\r\n\t\t};\r\n\t\r\n\t\tthis.__setListItemProperties = function(listItem,item)\r\n\t\t{\r\n\t\t\tif(listItem && item)\r\n\t\t\t{\r\n\t\t\t\tvar index = item[this.__nsList.__fieldIndex];\r\n\t\t\t\tlistItem.setAttribute(\"ns-index\",index);\r\n\t\t\t\titem[this.__nsList.__fieldItem] = listItem;\r\n\t\t\t\tthis.util.removeAllChildren(listItem);\r\n\t\t\t\tvar divCell = this.util.createDiv(null,\"nsListChild\");\r\n\t\t\t\tthis.util.addStyleClass(divCell,this.__nsList.__CLASS_CELL_CHILD);\r\n\t\t\t\tlistItem.appendChild(divCell);\r\n\t\t\t\tthis.__nsList.__addCellText(listItem,item,divCell);\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.__updateListItemText = function(listItem,item,index)\r\n\t\t{\r\n\t\t\tif(listItem && item)\r\n\t\t\t{\r\n\t\t\t\tthis.util.removeAllChildren(listItem);\r\n\t\t\t\tthis.__setListItemProperties(listItem,item);\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\tthis.__getFlatSource= function()\r\n\t\t{\r\n\t\t\treturn this.__nsList.__arrWrapper;\r\n\t\t};\r\n\t\t/********************************Common Functions for Grid ****************************************/\r\n\t\tthis.__setItemProperty = function(item,rowIndex,setFieldIndex)\r\n\t\t{\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tif(setFieldIndex)\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__nsList.__fieldIndex] = rowIndex;\r\n\t\t\t\t}\r\n\t\t\t\titem[this.__nsList.__fieldVisibleIndex] = rowIndex + 1;\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\tthis.__resetListItem = function(listItem,index,item)\r\n\t\t{\r\n\t\t\tlistItem.style.display = \"\";\r\n\t\t\tlistItem.setAttribute(\"ns-index\",index);\r\n\t\t\tthis.util.removeStyleClass(listItem,\"nsListItemSelected\");\r\n\t\t\tthis.__nsList.__updateItem(item,index);\r\n\t\t\tthis.__setListItemProperties(listItem,item);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar NSHierarchicalList = function(nsList)\r\n\t{\r\n\t\tthis.__nsList = nsList;\r\n\t\tthis.util = nsList.util;\r\n\t\tthis.__ARROW_COLLAPSE_PATH = \"M 0 9.99994L 6.10352e-005 -3.05176e-005L 5 5.00006L 0 9.99994 Z\";\r\n\t\tthis.__ARROW_EXPANDED_PATH = \"M 0 3.05176e-005L 9.99994 9.15527e-005L 4.99988 5.00003L 0 3.05176e-005 Z\";\r\n\t\tthis.__CLASS_ARROW = \"nsListArrowFill\";\r\n\t\tthis.__rowCounter = -1;\r\n\t\tthis.__enableOnDemandHierarchy = false;\r\n\t\tthis.__onDemandChildDetectionField = \"hasChildren\";\r\n\t\tthis.__onDemandChildFetchCallback = null;\r\n\t\t/********************************Common Functions for Grid ****************************************/\r\n\t\tthis.__initialize = function()\r\n\t\t{\r\n\t\t\tvar setting = this.__nsList.__setting;\r\n\t\t\tif(setting.hasOwnProperty(\"enableOnDemandHierarchy\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__enableOnDemandHierarchy = Boolean.parse(setting[\"enableOnDemandHierarchy\"]);\r\n\t\t\t}\r\n\t\t\tif(this.__enableOnDemandHierarchy)\r\n\t\t\t{\r\n\t\t\t\tif(setting.hasOwnProperty(\"onDemandChildDetectionField\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__onDemandChildDetectionField = setting[\"onDemandChildDetectionField\"];\r\n\t\t\t\t}\r\n\t\t\t\tif(setting.hasOwnProperty(\"onDemandChildFetchCallback\"))\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__onDemandChildFetchCallback = setting[\"onDemandChildFetchCallback\"];\r\n\t\t\t\t\tthis.__onDemandChildFetchCallback = this.util.getFunction(this.__onDemandChildFetchCallback);\r\n\t\t\t\t}\r\n\t\t\t\tif(!this.__onDemandChildDetectionField)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.throwNSError(\"NSList\",\"Value for onDemandChildDetectionField is not valid\");\r\n\t\t\t\t}\r\n\t\t\t\tif(!this.__onDemandChildFetchCallback)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.throwNSError(\"NSList\",\"Value for onDemandChildFetchCallback is not valid\");\r\n\t\t\t\t}\r\n\t\t\t\tif(this.__enableVirtualScroll)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.warning(\"NSList\",\"As enableVirtualScroll is true so OnDemandHierarchy will have no impact.\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.dataSource = function(source)\r\n\t\t{\r\n\t\t\tthis.__nsList.__arrWrapper = this.__nsList.__dataSource.slice(0);\r\n\t\t\tthis.__setWrapperSource(this.__nsList.__arrWrapper,0,-1,0,true,true,true);\r\n\t\t\tthis.__nsList.__updateTotalRecords(this.__rowCounter);\r\n\t\t\tthis.__nsList.__arrInternalSource = this.__nsList.__arrFlatHierarchicalSource.slice(0);\r\n\t\t};\r\n\t\t\r\n\t\tthis.addItemsAsChildren = function(item,arrChildren)\r\n\t\t{\r\n\t\t\tif(item && arrChildren && arrChildren.length > 0)\r\n\t\t\t{\r\n\t\t\t\tif(!item[this.__nsList.__childField])\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__nsList.__childField] = [];\r\n\t\t\t\t}\r\n\t\t\t\titem[this.__nsList.__childField].push.apply(item[this.__nsList.__childField], arrChildren);\r\n\t\t\t\tthis.__setWrapperSource(this.__nsList.__arrWrapper,0,-1,0,true,false,false);\r\n\t\t\t\tthis.__nsList.__updateTotalRecords(this.__rowCounter);\r\n\t\t\t\tthis.__nsList.__arrInternalSource = this.__nsList.__arrFlatHierarchicalSource.slice(0);\r\n\t\t\t\titem[this.__nsList.__fieldItemVisible] = true;\r\n\t\t\t\titem[this.__nsList.__fieldIsCollapsed] = false;\r\n\t\t   \t\tvar listItem = this.__nsList.__getListItemFromItem(item);\r\n\t\t   \t\tvar rowIndex = this.__nsList.__getIndexByItem(item);\r\n\t\t   \t\tthis.__nsList.__showHideRow(rowIndex,null,false);\r\n\t\t   \t\tconsole.log(this.__nsList.__arrFlatHierarchicalSource);\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.__setWrapperSource = function(source,offset,parentIndex,level,setFieldIndex,setIsCollapsed,setItemVisible)\r\n\t\t{\r\n\t\t\tif(source)\r\n\t\t\t{\r\n\t\t\t\tif(level === 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(!offset)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\toffset = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.__nsList.__arrFlatHierarchicalSource = [];\r\n\t\t\t\t\tthis.__rowCounter = offset;\r\n\t\t\t\t}\r\n\t\t\t\tvar length = source.length;\r\n\t\t\t\tvar count = 0;\r\n\t\t\t\tvar item = null;\r\n\t\t\t\tfor (count = 0; count < length; count++) \r\n\t\t\t\t{\r\n\t\t\t\t\titem = source[count];\r\n\t\t\t\t\tthis.__rowCounter++;\r\n\t\t\t\t\tthis.__nsList.__arrFlatHierarchicalSource.push(item);\r\n\t\t\t\t\tthis.__setItemProperty(item,parentIndex,level,setFieldIndex,setIsCollapsed,setItemVisible);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\tthis.__createList= function(dataSet,startIndex,endIndex)\r\n\t\t{\r\n\t\t\tvar item = null;\r\n\t\t\tvar index = -1;\r\n\t\t    for(var count = startIndex; count < endIndex; count++)\r\n\t\t    {\r\n\t    \t\titem = dataSet[count];\r\n\t    \t\tif(item)\r\n\t    \t\t{\r\n\t    \t\t\tindex =  item[this.__nsList.__fieldIndex];\r\n\t        \t\tthis.__nsList.__updateItem(item,index);\r\n\t        \t\tthis.__nsList.__createListItem(item);\r\n\t    \t\t}\r\n\t\t    }\r\n\t\t};\r\n\t\t\r\n\t\tthis.__createListItem = function(listItem,item)\r\n\t\t{\r\n\t\t};\r\n\t\r\n\t\tthis.__addSVGInPage = function()\r\n\t\t{\r\n\t\t\tvar objSVG = new NSSvg();\r\n\t\t\tobjSVG.addPath(\"svgListArrowDown\",this.__ARROW_EXPANDED_PATH,\"0 0 16 16\");\r\n\t\t\tobjSVG.addPath(\"svgListArrowRight\",this.__ARROW_COLLAPSE_PATH,\"0 0 16 16\");\r\n\t\t};\r\n\t\r\n\t\tthis.__setListItemProperties = function(listItem,item)\r\n\t\t{\r\n\t\t\tif(listItem && item)\r\n\t\t\t{\r\n\t\t\t\tvar index = item[this.__nsList.__fieldIndex];\r\n\t\t\t\tvar level = item[this.__nsList.__fieldItemLevel];\r\n\t\t\t\tvar parentIndex = item[this.__nsList.__fieldParentIndex];\r\n\t\t\t\tlistItem.setAttribute(\"ns-index\",index);\r\n\t\t\t\tlistItem.setAttribute(\"ns-level\",level);\r\n\t\t\t\tif(item[this.__nsList.__fieldHasParent])\r\n\t\t\t    {\r\n\t\t\t\t\tlistItem.setAttribute(\"ns-parent-index\",parentIndex);\r\n\t\t\t    }\r\n\t\t\t\titem[this.__nsList.__fieldItem] = listItem;\r\n\t\t\t\tthis.util.removeAllChildren(listItem);\r\n\t\t\t\tvar divCell = this.util.createDiv(null,\"nsListChild\");\r\n\t\t\t\tlistItem.appendChild(divCell);\r\n\t\t\t\t\r\n\t\t\t\tvar hierarchicalPadding = 0;\r\n\t\t\t\tvar divText = null;\r\n\t\t\t\tif(item && item.hasOwnProperty(this.__nsList.__labelField) && item[this.__nsList.__labelField])\r\n\t\t\t\t{\r\n\t\t\t        if((item[this.__nsList.__childField]  && item[this.__nsList.__childField].length > 0) || (this.__isOnDemandHasChildren(item)))\r\n\t\t\t        {\r\n\t\t\t        \tthis.util.addStyleClass(divCell,this.__nsList.__CLASS_GROUP_CELL);\r\n\t\t\t        \tthis.__nsList.__createArrow(item,index,divCell,item[this.__nsList.__fieldIsCollapsed]);\r\n\t\t\t        \tvar cellText = this.util.createDiv(null,this.__nsList.__CLASS_CELL_CHILD);\r\n\t\t\t        \tthis.util.addStyleClass(cellText,\"nsListGroupCellText\");\r\n\t\t\t        \tcellText.style.verticalAlign = \"top\";\r\n\t\t\t        \tdivText = cellText;\r\n\t\t\t        \tdivCell.appendChild(cellText);\r\n\t\t\t        }\r\n\t\t\t        else\r\n\t\t\t        {\r\n\t\t\t        \tthis.util.addStyleClass(divCell,this.__nsList.__CLASS_CELL_CHILD);\r\n\t\t\t        \tdivText = divCell;\r\n\t\t\t        \t//24 = 16(Arrow Width) + 6(Arrow Parent Padding) + 2(divCell horizontalGap between elements shown in debugger)\r\n\t\t\t        \thierarchicalPadding = 24;\r\n\t\t\t        }\r\n\t\t\t        this.__nsList.__addCellText(listItem,item,divText);\r\n\t\t        \tif(level === 0)\r\n\t\t        \t{\r\n\t\t        \t\tlistItem.style.paddingLeft = \"1px\";\r\n\t\t        \t}\r\n\t\t        \telse\r\n\t\t        \t{\r\n\t\t        \t\tvar paddingLeft = (10 * level) + hierarchicalPadding;\r\n\t\t        \t\tlistItem.style.paddingLeft = paddingLeft + \"px\";\r\n\t\t        \t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.__updateListItemText = function(listItem,item,index)\r\n\t\t{\r\n\t\t\tif(listItem && item)\r\n\t\t\t{\r\n\t\t\t\tthis.util.removeAllChildren(listItem);\r\n\t\t\t\tthis.__setListItemProperties(listItem,item);\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\tthis.__getFlatSource= function()\r\n\t\t{\r\n\t\t\treturn this.__nsList.__arrFlatHierarchicalSource;\r\n\t\t};\r\n\t\t\r\n\t\tthis.__handleOnDemandClick = function(item,event)\r\n\t\t{\r\n\t\t\tif(item && this.__isOnDemandHasChildren(item))\r\n\t\t\t{\r\n\t\t\t\tif(this.__onDemandChildFetchCallback)\r\n\t\t\t\t{\r\n\t\t\t\t\tevent = this.util.getEvent(event);\r\n\t\t\t\t\tvar rowLevel = item[this.__nsList.__fieldItemLevel];\r\n\t\t\t\t\tvar rowIndex = this.__nsList.__getIndexByItem(item);\r\n\t\t\t\t\tthis.__onDemandChildFetchCallback(item,rowIndex,rowLevel,event);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\t/********************************Common Functions for Grid ****************************************/\r\n\t\tthis.__setItemProperty = function(item,parentIndex,level,setFieldIndex,setIsCollapsed,setItemVisible)\r\n\t\t{\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\tif(this.util.isUndefinedOrNull(setIsCollapsed))\r\n\t\t\t\t{\r\n\t\t\t\t\tsetIsCollapsed = true;\r\n\t\t\t\t}\r\n\t\t\t\tif(this.util.isUndefinedOrNull(setItemVisible))\r\n\t\t\t\t{\r\n\t\t\t\t\tsetItemVisible = true;\r\n\t\t\t\t}\r\n\t\t\t\tvar totalRowCount = this.__rowCounter;\r\n\t\t\t\tif(setFieldIndex || this.util.isUndefinedOrNull(item[this.__nsList.__fieldIndex]))\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__nsList.__fieldIndex] = totalRowCount;\r\n\t\t\t\t}\r\n\t\t\t\titem[this.__nsList.__fieldVisibleIndex] = totalRowCount;\r\n\t\t\t\titem[this.__nsList.__fieldItemLevel] = level;\r\n\t\t\t\tvar hasChild = false;\r\n\t\t\t\tif(item.hasOwnProperty(this.__nsList.__childField) && item[this.__nsList.__childField] && item[this.__nsList.__childField].length > 0)\r\n\t\t\t    {\r\n\t\t\t    \thasChild = true;\r\n\t\t\t    \tthis.__setWrapperSource(item[this.__nsList.__childField],0,totalRowCount,level + 1,setFieldIndex,setIsCollapsed,setItemVisible);\r\n\t\t\t    }\r\n\t\t\t\titem[this.__nsList.__fieldParentIndex] = parentIndex;\r\n\t\t\t\tif(parentIndex > -1)\r\n\t\t\t    {\r\n\t\t\t\t\titem[this.__nsList.__fieldHasParent] = true;\r\n\t\t\t    }\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__nsList.__fieldHasParent] = false;\r\n\t\t\t\t}\r\n\t\t\t\titem[this.__nsList.__fieldHasChild] = hasChild;\r\n\t\t\t\tif(setItemVisible || this.util.isUndefinedOrNull(item[this.__nsList.__fieldItemVisible]))\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__nsList.__fieldItemVisible] = true;\r\n\t\t\t\t}\r\n\t\t\t\tif(setIsCollapsed || this.util.isUndefinedOrNull(item[this.__nsList.__fieldIsCollapsed]))\r\n\t\t\t\t{\r\n\t\t\t\t\titem[this.__nsList.__fieldIsCollapsed] = this.__isOnDemandHasChildren(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.__createArrow = function(compArrow,objSVG,arrowID,isCollapsed)\r\n\t\t{\r\n\t\t\t var svg = objSVG.addSVG(compArrow,arrowID + \"svg\",this.__CLASS_ARROW,null,null,null,null,null,null,true);\r\n\t\t\t if(isCollapsed)\r\n\t\t\t {\r\n\t\t\t\t objSVG.addUse(svg,arrowID + \"use\",null,\"#svgListArrowRight\");\r\n\t\t\t }\r\n\t\t\t else\r\n\t\t\t {\r\n\t\t\t\t objSVG.addUse(svg,arrowID + \"use\",null,\"#svgListArrowDown\");\r\n\t\t\t }\r\n\t\t};\r\n\t\r\n\t\tthis.__setArrowDirection = function(objSVG,useID,isCollapsed)\r\n\t\t{\r\n\t\t\tif(isCollapsed)\r\n\t\t\t{\r\n\t\t\t\tobjSVG.changeUseHref(useID,\"#svgListArrowRight\");\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tobjSVG.changeUseHref(useID,\"#svgListArrowDown\");\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\tthis.__resetListItem = function(listItem,index,item)\r\n\t\t{\r\n\t\t\tlistItem.style.display = \"\";\r\n\t\t\tlistItem.setAttribute(\"ns-index\",index);\r\n\t\t\tthis.util.removeStyleClass(listItem,\"nsListItemSelected\");\r\n\t\t\tthis.__nsList.__updateItem(item,index);\r\n\t\t\tthis.__setListItemProperties(listItem,item);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__isOnDemandHasChildren = function(item)\r\n\t\t{\r\n\t\t\treturn (this.__enableOnDemandHierarchy && item[this.__onDemandChildDetectionField]);\r\n\t\t};\r\n\t};\r\n\t\r\n\tvar NSListFilter = function(nsList)\r\n\t{\r\n\t\tthis.__nsList = nsList;\r\n\t\t\r\n\t\tthis.util = nsList.util;\r\n\t\tthis.__filteredColumn = [];\r\n\t\tthis.__config = {};\r\n\t\tthis.__nsDragDrop = null;\r\n\t\t\r\n\t\tthis.__initialize = function()\r\n\t\t{\r\n\t\t\t\r\n\t\t};\r\n\t\t\r\n\t\tthis.filter = function(strData,filterSetting,enableHighlighting,recordLimit)\r\n\t\t{\r\n\t\t\tif(!filterSetting)\r\n\t\t\t{\r\n\t\t\t\tfilterSetting = {};\r\n\t\t\t}\r\n\t\t\tif(this.util.isUndefinedOrNull(enableHighlighting))\r\n\t\t\t{\r\n\t\t\t\tenableHighlighting = true;\r\n\t\t\t}\r\n\t\t\tvar config = {\r\n\t\t\t\t\tcaseSensitive: this.util.isUndefinedOrNull(filterSetting[\"caseSensitive\"]) ? false : Boolean.parse(filterSetting[\"caseSensitive\"]),\r\n\t\t\t\t\tmultiline: this.util.isUndefinedOrNull(filterSetting[\"multiline\"]) ? false : Boolean.parse(filterSetting[\"multiline\"]),\r\n\t\t\t\t\tmatchType: filterSetting[\"matchType\"] || new NSFilter().CONTAINS\r\n\t\t\t};\r\n\t\t\tvar filter = {};\r\n\t\t\tvar setting = {};\r\n\t\t\tvar field = this.__nsList.__labelField;\r\n\t\t\tfilter[field] = strData;\r\n\t\t\tsetting[field] = {caseSensitive:config[\"caseSensitive\"],multiline:config[\"multiline\"],matchType:config[\"matchType\"]};\r\n\t\t\tif(filter && Object.keys(filter).length > 0)\r\n\t\t\t{\r\n\t\t\t\tthis.__handleFiltering(filter,setting,enableHighlighting,recordLimit);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.__resetFiltering();\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.reset = function()\r\n\t\t{\r\n\t\t\tthis.__resetFiltering();\r\n\t\t};\r\n\t\t\r\n\t\tthis.__handleFiltering = function(filter,setting,enableHighlighting,recordLimit)\r\n\t\t{\r\n\t\t\tthis.__filteredColumn = [];\r\n\t\t\tif(filter)\r\n\t\t    {\r\n\t\t\t\t var field = this.__nsList.__labelField;\r\n\t\t\t\t var source = this.__nsList.__arrWrapper;\r\n\t\t\t\t var isHierarchical = false;\r\n\t\t\t\t if(this.__nsList.__enableHierarchical)\r\n\t\t\t\t {\r\n\t\t\t\t\t isHierarchical = true;\r\n\t\t\t\t }\r\n\t\t\t   \t var nsFilter = new NSFilter(source,filter,setting,recordLimit,isHierarchical,this.__nsList.__childField);\r\n\t\t\t   \t this.__nsList.__arrInternalSource = nsFilter.execute();\r\n\t\t\t   \t if(enableHighlighting)\r\n\t\t\t   \t {\r\n\t\t\t   \t\tfor(var key in filter) \r\n\t\t  \t        {\r\n\t\t  \t        \tthis.__filteredColumn.push({field:key,text:filter[key]});\r\n\t\t  \t        }\r\n\t\t\t   \t }\r\n\t\t\t   \t if(isHierarchical)\r\n\t\t\t   \t {\r\n\t\t\t   \t\tthis.__nsList.__objGrid.__setWrapperSource(this.__nsList.__arrInternalSource,0,-1,0,false);\r\n\t\t\t   \t\tthis.__nsList.__arrInternalSource = this.__nsList.__arrFlatHierarchicalSource.slice(0); \r\n\t\t\t   \t }\r\n\t\t\t   \t this.__nsList.__updateTotalRecords();\r\n\t\t\t   \t this.__nsList.__renderBody();\r\n\t\t\t   \t this.__nsList.__updateVisibleIndexByListItem(this.__nsList.__arrInternalSource);\r\n\t\t    }\r\n\t\t};\r\n\t\r\n\t\tthis.__resetFiltering = function()\r\n\t\t{\r\n\t\t\tif(this.__nsList.__dataSource)\r\n\t\t\t{\r\n\t\t\t\tthis.__nsList.__arrInternalSource = this.__nsList.__arrWrapper.slice(0);\r\n\t\t\t\tthis.__filteredColumn = [];\r\n\t\t\t\tif(this.__nsList.__enableHierarchical)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__nsList.__objGrid.__setWrapperSource(this.__nsList.__arrInternalSource,0,-1,0,false);\r\n\t\t\t\t\tthis.__nsList.__arrInternalSource = this.__nsList.__arrFlatHierarchicalSource.slice(0); \r\n\t\t\t\t}\r\n\t\t\t\tthis.__nsList.__updateTotalRecords();\r\n\t\t\t\tthis.__nsList.__renderBody();\r\n\t\t\t\tthis.__nsList.__updateVisibleIndexByListItem(this.__nsList.__arrInternalSource);\r\n\t\t\t}\r\n\t\t};\r\n\t\r\n\t\tthis.__highlightDiv = function(divText)\r\n\t\t{\r\n\t\t\tvar length = this.__filteredColumn.length;\r\n\t\t\tfor (var count = 0; count < length; count++) \r\n\t\t    {\r\n\t\t\t\tvar text = this.__filteredColumn[count].text;\r\n\t\t\t\tthis.util.highlightText(divText,text,\"nsTextHighlight\");\r\n\t\t    }\r\n\t\t};\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t};\r\n\t\r\n\tvar NSListDragDrop = function(nsList)\r\n\t{\r\n\t\tthis.__nsList = nsList;\r\n\t\tthis.util = nsList.util;\r\n\t\t\r\n\t\tthis.__disableDraggableFunction = null;\r\n\t\tthis.__disableDropableFunction = null;\r\n\t\t\r\n\t\tthis.initialize = function()\r\n\t\t{\r\n\t\t\tvar container = this.__nsList.__listContainer;\r\n\t\t\tvar setting = {container:container,childNodeType:\"LI\",isContainerDraggable:this.__nsList.__isDraggable,isContainerDroppable:this.__nsList.__isDroppable,\r\n\t\t\t\t\t\t   enableDragByHandle:this.__nsList.__enableDragByHandle,dragHandlerClass:this.__nsList.__dragHandlerClass,\r\n\t\t\t\t\t\t   enableDragAfterHold:this.__nsList.__enableDragAfterHold,enableCloneMode:this.__nsList.__enableCloneMode,holdTime:this.__nsList.__holdTime,createCloneCallback:this.__createClone.bind(this),\r\n\t\t\t\t\t\t   createPlaceholderCallback:this.__createPlaceholder.bind(this),nodeDroppableCallback:this.__isListItemDroppable.bind(this),\r\n\t\t\t\t\t\t   nodeDraggableCallback:this.__isListItemDraggable.bind(this),insertNodeCallback:this.__insertListItemHandler.bind(this),\r\n\t\t\t\t\t\t   moveNodeCallback:this.__moveListItemHandler.bind(this),removeNodeCallback:this.__removeListItemHandler.bind(this)};\r\n\t\t\tthis.__nsDragDrop = new NSDragDrop(setting);\r\n\t\t\tthis.util.addEvent(container,this.__nsDragDrop.ITEM_DROPPING,this.__itemDroppingHandler.bind(this));\r\n\t\t\tthis.util.addEvent(container,this.__nsDragDrop.ITEM_DROPPED,this.__itemDroppedHandler.bind(this));\r\n\t\t\tthis.util.addEvent(container,this.__nsDragDrop.DRAG_STARTING,this.__dragStartingHandler.bind(this));\r\n\t\t\tthis.util.addEvent(container,this.__nsDragDrop.DRAG_STARTED,this.__dragStartHandler.bind(this));\r\n\t\t\tthis.util.addEvent(container,this.__nsDragDrop.DRAGGING,this.__draggingHandler.bind(this));\r\n\t\t\tthis.util.addEvent(container,this.__nsDragDrop.DRAG_END,this.__dragEndHandler.bind(this));\r\n\t\t};\r\n\t\t\r\n\t\tthis.__initialize = function()\r\n\t\t{\r\n\t\t\tvar setting = this.__nsList.__setting;\r\n\t\t\tif(setting.hasOwnProperty(\"disableDraggableFunction\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__disableDraggableFunction = setting[\"disableDraggableFunction\"];\r\n\t\t\t\tthis.__disableDraggableFunction = this.util.getFunction(this.__disableDraggableFunction);\r\n\t\t\t}\r\n\t\t\tif(setting.hasOwnProperty(\"disableDropableFunction\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__disableDropableFunction = setting[\"disableDropableFunction\"];\r\n\t\t\t\tthis.__disableDropableFunction = this.util.getFunction(this.__disableDropableFunction);\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.__dragStartingHandler = function(event)\r\n\t\t{\r\n\t\t\tvar listItem = event.node;\r\n\t\t\tvar arrItems = this.__getSelectedItems(listItem);\r\n\t\t\tvar data = {parentID:this.__nsList.__listContainer.getAttribute(\"id\"),arrItems:arrItems};\r\n\t\t\tthis.__nsDragDrop.setDragData(data);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__dragStartHandler = function(event)\r\n\t\t{\r\n\t\t\tvar listItem = event.node;\r\n\t\t\tvar data = this.__nsDragDrop.getDragData();\r\n\t\t\tvar arrItems = data.arrItems;\r\n\t\t\tthis.util.dispatchEvent(this.__nsList.__baseComponent,this.__nsList.DRAG_STARTED,arrItems,{items:arrItems});\r\n\t\t};\r\n\t\t\r\n\t\tthis.__draggingHandler = function(event)\r\n\t\t{\r\n\t\t\tvar listData = event.item;\r\n\t\t\tvar data = this.__nsDragDrop.getDragData();\r\n\t\t\tvar arrItems = data.arrItems;\r\n\t\t\tlistData.arrItems = arrItems;\r\n\t \t    this.util.dispatchEvent(this.__nsList.__baseComponent,this.__nsList.DRAGGING,listData,{item:listData});\r\n\t\t};\r\n\t\t\r\n\t\tthis.__dragEndHandler = function(event)\r\n\t\t{\r\n\t\t\tvar data = this.__nsDragDrop.getDragData();\r\n\t\t\tvar arrItems = data.arrItems;\r\n\t \t    this.util.dispatchEvent(this.__nsList.__baseComponent,this.__nsList.DRAG_END,arrItems,{items:arrItems});\r\n\t\t};\r\n\t\t\r\n\t\tthis.__itemDroppingHandler = function(event)\r\n\t\t{\r\n\t\t\tvar cancelled = this.util.dispatchEvent(this.__nsList.__baseComponent,this.__nsList.ITEM_DROPPING,event.item,{item:event.item},true,true);\r\n\t\t\tif(cancelled)\r\n\t\t\t{\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t}\r\n\t\t};\r\n\t\t\r\n\t\tthis.__itemDroppedHandler = function(event)\r\n\t\t{\r\n\t\t\tthis.util.dispatchEvent(this.__nsList.__baseComponent,this.__nsList.ITEM_DROPPED,event.item,{item:event.item},true,false);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__createClone = function(listItem,containerConfiguration)\r\n\t\t{\r\n\t\t\tvar listContainer = this.__nsList.__listContainer.cloneNode(false);\r\n\t\t\tvar data = this.__nsDragDrop.getDragData();\r\n\t\t\tvar arrItems = data.arrItems;\r\n\t\t\tvar clonedNode = null;\r\n\t\t\t//make a clone only when clone Mode is ON or the list is not droppable\r\n\t\t\tif(this.__nsList.__enableCloneMode || !this.__nsList.__isDroppable)\r\n\t\t\t{\r\n\t\t\t\tfor(var count = 0;count < arrItems.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tclonedNode = arrItems[count][this.__nsList.__fieldItem].cloneNode(true);\r\n\t\t\t\t\tclonedNode.setAttribute(\"id\",\"comp\" + listContainer.id + \"ClonedNode\" + count);\r\n\t\t\t\t\tlistContainer.appendChild(clonedNode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tfor(var count = 0;count < arrItems.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\tclonedNode = arrItems[count][this.__nsList.__fieldItem];\r\n\t\t\t\t\tlistContainer.appendChild(clonedNode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlistContainer.style.width = containerConfiguration.width + \"px\";\r\n\t\t\treturn listContainer;\r\n\t\t};\r\n\t\t\r\n\t\tthis.__createPlaceholder = function(listItem)\r\n\t\t{\r\n\t\t\tvar listItem = this.util.createElement(\"li\",null,\"nsListEmptyItem\");\r\n\t\t\tlistItem.innerHTML = \"<div class='nsListEmptyChild'>&nbsp;</div>\";\r\n\t\t\treturn listItem;\r\n\t\t};\r\n\t\t\r\n\t\tthis.__isListItemDroppable = function(listItem)\r\n\t\t{\r\n\t\t\tvar item = this.__getItemFromTarget(listItem);\r\n\t\t\treturn this.__isItemDroppable(listItem,item);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__isListItemDraggable = function(listItem)\r\n\t\t{\r\n\t\t\tvar item = this.__getItemFromTarget(listItem);\r\n\t\t\treturn this.__isItemDraggable(listItem,item);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__insertListItemHandler = function(container,newListItem,index,currentListItem,data)\r\n\t\t{\r\n\t\t\tvar arrItems = data.arrItems;\r\n\t\t\tthis.__nsList.__addItem(arrItems,index);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__moveListItemHandler = function(container,newListItem,index,currentListItem,data)\r\n\t\t{\r\n\t\t\tvar arrItems = data.arrItems;\r\n\t\t\tthis.__nsList.__moveItem(arrItems,index);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__removeListItemHandler = function(container,listItem,data)\r\n\t\t{\r\n\t\t\t\r\n\t\t};\r\n\t\t\r\n\t\tthis.__getSelectedItems = function(target)\r\n\t\t{\r\n\t\t\tvar list = this.__nsList;\r\n\t\t\tvar listContainer = list.__listContainer;\r\n\t\t\tvar index = parseInt(list.__getIndexFromTarget(target));\r\n\t\t\tvar item = list.__getItemByIndex(index);\r\n\t\t\tvar arrItems = [];\r\n\t\t\tvar arrSelectedItems = list.getSelectedItems();\r\n\t\t\tvar itemSelected = false; \r\n\t\t\tif(arrSelectedItems && arrSelectedItems.length > 0)\r\n\t\t\t{\r\n\t\t\t\tvar tempItem = null;\r\n\t\t\t\tfor(var count = 0;count < arrSelectedItems.length;count++)\r\n\t\t\t\t{\r\n\t\t\t\t\ttempItem = this.__cloneItem(arrSelectedItems[count]);\r\n\t\t\t\t\tif(tempItem[list.__fieldIndex] === item[list.__fieldIndex])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titemSelected = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tarrItems.push(tempItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(!itemSelected || !arrItems || arrItems.length === 0 || !arrItems[0])\r\n\t\t\t{\r\n\t\t\t\tvar tempItem = this.__cloneItem(item);\r\n\t\t\t\tarrItems = [tempItem];\r\n\t\t\t}\r\n\t\t\treturn arrItems;\r\n\t\t};\r\n\t\t\r\n\t\tthis.__cloneItem = function(item)\r\n\t\t{\r\n\t\t\tvar list = this.__nsList;\r\n\t\t\tvar tempItem = null;\r\n\t\t\tif(item)\r\n\t\t\t{\r\n\t\t\t\ttempItem = this.util.cloneObject(item);\r\n\t\t\t\tif(list.__enableHierarchical && tempItem[list.__childField] && tempItem[list.__childField].length > 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar arrChild = tempItem[list.__childField];\r\n\t\t\t\t\tvar length = arrChild.length;\r\n\t\t\t\t\tvar childItem = null;\r\n\t\t\t\t\tvar tempChildItem = null;\r\n\t\t\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchildItem = arrChild[count];\r\n\t\t\t\t\t\ttempChildItem = this.__cloneItem(childItem);\r\n\t\t\t\t\t\tif(tempChildItem)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttempItem[list.__childField][count] = tempChildItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn tempItem;\r\n\t\t};\r\n\t\t\r\n\t\tthis.__getItemFromTarget = function(listItem)\r\n\t\t{\r\n\t\t\tvar itemIndex = this.__nsList.__getIndexFromTarget(listItem);\r\n\t\t\treturn this.__nsList.__getItemByIndex(itemIndex);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__isItemDraggable = function(listItem,item) \r\n\t    {\r\n\t\t\tvar retValue = true;\r\n\t\t\tif(this.__disableDraggableFunction)\r\n\t\t\t{\r\n\t\t\t\tretValue = this.__disableDraggableFunction(item,this.__nsList.__labelField,item[this.__nsList.__fieldIndex],item[this.__nsList.__fieldDisableHover],listItem);\r\n\t\t\t\tretValue = !retValue;\r\n\t\t\t}\r\n\t    \treturn retValue;\r\n\t\t};\r\n\t\t\r\n\t\tthis.__isItemDroppable = function(event) \r\n\t    {\r\n\t\t\tvar retValue = true;\r\n\t\t\tif(this.__disableDropableFunction)\r\n\t\t\t{\r\n\t\t\t\tvar target = this.util.getTarget(event);\r\n\t\t\t\ttarget = this.util.findParent(target,\"li\");\r\n\t\t\t\tvar index = this.__nsList.__getIndexFromTarget(target);\r\n\t\t\t\tvar item = this.__nsList.__getItemByIndex(index);\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tretValue = this.__disableDropableFunction(item,this.__nsList.__labelField,item[this.__nsList.__fieldIndex],item[this.__nsList.__fieldDisableHover],target);\r\n\t\t\t\t\tretValue = !retValue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t    \treturn retValue;\r\n\t\t};\r\n\t\t\r\n\t\tthis.__initialize();\r\n\t};\r\n\treturn NSList;\r\n})();\r\nnsModuleExport(this,\"NSList\",NSList);\r\n";
