ns-components-angular
Version:
Angular Wrapper Components for NSComponents
1 lines • 56.9 kB
TypeScript
export declare const NSMultiSelectDropdownCode = "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\n\"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);var NSMultiSelectDropdown = (function()\r\n{\r\n\tfunction NSMultiSelectDropdown(component,setting) \r\n\t{\r\n\t\tthis.__setting = setting;\r\n\t\tthis.__context = window;\r\n\t\tthis.__config = {};\r\n\t\tthis.__arrSelectedItems = [];\r\n\t\t\r\n\t\tthis.__documentClickRef = null;\r\n\t\tthis.__documentKeydownRef = null;\r\n\t\t\r\n\t\tthis.base.__setBaseComponent.call(this,component);\r\n\t};\r\n\tnsExtendPrototype(NSContainerBase,NSMultiSelectDropdown);\r\n\tNSMultiSelectDropdown.prototype.constructor = NSMultiSelectDropdown;\r\n\t\r\n\tNSMultiSelectDropdown.prototype.initializeComponent = function() \r\n\t{\r\n\t\tthis.base.initializeComponent.call(this);\r\n\t\tthis.__fieldPrefix = this.getID() + \"_NS_MultiSelect_Field\";\r\n\t\tthis.__fieldChecked = this.__fieldPrefix + \"_Checked\";\r\n\t\tthis.__fieldDisabled = this.__fieldPrefix + \"_Disabled\";\r\n\t\tthis.__fieldIndex = this.__fieldPrefix + \"_Index\";\r\n\t\tthis.__setSetting();\r\n\t\tthis.__createComponent();\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.setComponentProperties = function() \r\n\t{\r\n\t\tthis.base.setComponentProperties.call(this);\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.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\tNSMultiSelectDropdown.prototype.removeComponent = function() \r\n\t{\r\n\t\tif(this.__documentClickRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"click\",this.__documentClickRef);\r\n\t\t\tthis.__documentClickRef = null;\r\n\t\t}\r\n\t\tif(this.__documentKeydownRef)\r\n\t\t{\r\n\t\t\tthis.util.removeEvent(document,\"keydown\",this.__documentKeydownRef);\r\n\t\t\tthis.__documentKeydownRef = null;\r\n\t\t}\r\n\t\tthis.base.removeComponent.call(this);\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.componentResized = function(event) \r\n\t{\r\n\t\tthis.base.componentResized.call(this,event);\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.dataSource = function(source) \r\n\t{\r\n\t\tthis.__config.dataSource = this.util.cloneObject(source,true);\r\n\t\tthis.__updateItems();\r\n\t\tthis.__applyDataSource(this.__config.dataSource);\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.getSelectedIndexes = function() \r\n\t{\r\n\t\tvar selected = this.__getSelectItems();\r\n\t\treturn selected.indexes;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.getSelectedItems = function() \r\n\t{\r\n\t\tvar selected = this.__getSelectItems();\r\n\t\treturn selected.items;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.setSelectUnselectItemsByValue = function(arrValues,isSelected) \r\n\t{\r\n\t\tif(!this.util.isUndefinedOrNull(arrValues) && this.__config.dataSource && this.__config.dataSource.length > 0)\r\n\t\t{\r\n\t\t\tarrItems = this.util.isArray(arrValues) ? arrValues : [arrValues];\r\n\t\t\tfor(var count = 0;count < arrValues.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar value = arrValues[count];\r\n\t\t\t\tvar tempItem = this.__getItemByValue(value);\r\n\t\t\t\tthis.__setSelectUnselectInItem(tempItem,isSelected);\r\n\t\t\t}\r\n\t\t\tthis.__update();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.setSelectUnselectItems = function(arrItems,isSelected) \r\n\t{\r\n\t\tif(!this.util.isUndefinedOrNull(arrItems) && this.__config.dataSource && this.__config.dataSource.length > 0)\r\n\t\t{\r\n\t\t\tarrItems = this.util.isArray(arrItems) ? arrItems : [arrItems];\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\tvar tempItem = this.util.isNumber(item) ? this.__getItemByIndex(item) : this.__getItemByValue(item[this.__config.valueField]);\r\n\t\t\t\tthis.__setSelectUnselectInItem(tempItem,isSelected);\r\n\t\t\t}\r\n\t\t\tthis.__update();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__setSetting = function()\r\n\t{\r\n\t\tif(!this.__setting)\r\n\t\t{\r\n\t\t\tthis.__setting = {};\r\n\t\t}\r\n\t\tvar setting = this.__setting;\r\n\t\tif(setting)\r\n\t\t{\r\n\t\t\tif(setting.hasOwnProperty(\"context\"))\r\n\t\t\t{\r\n\t\t\t\tthis.__context = setting[\"context\"];\r\n\t\t\t}\r\n\t\t\tthis.__config = {\r\n\t\t\t\tdataSource: setting[\"dataSource\"],\r\n\t\t\t\tlabelField: setting[\"labelField\"] || \"label\",\r\n\t\t\t\tvalueField: setting[\"valueField\"] || setting[\"labelField\"] || \"label\",\r\n\t\t\t\tenableVirtualScroll: Boolean.parse(setting[\"enableVirtualScroll\"]),\r\n\t\t\t\titemHeight: setting[\"itemHeight\"] || 30,\r\n\t\t\t\tlabelType: setting[\"labelType\"] || NSMultiSelectDropdown.LABEL_TYPE_OF_TEXT,\r\n\t\t\t\titemAllowedToBeSelected: this.util.isUndefinedOrNull(setting[\"itemAllowedToBeSelected\"]) ? -1 : parseInt(setting[\"itemAllowedToBeSelected\"]),\r\n\t\t\t\t//textSelectedCount will be shown only if more than countAfterShowText items where selected.\r\n\t\t\t\tcountAfterShowText: this.util.isUndefined(setting[\"countAfterShowText\"]) ? 3 : parseInt(setting[\"countAfterShowText\"]),\r\n\t\t\t\t//Add \"...\" at end of text after selected options after countAfterShowText items is selected. Overrides textSelectedCount option.\r\n\t\t\t\ttruncateText: Boolean.parse(setting[\"truncateText\"]),\r\n\t\t\t\tlistWidth: setting[\"listWidth\"],\r\n\t\t\t\tlistHeight: setting[\"listHeight\"],\r\n\t\t\t\tfilterSetting: setting[\"filterSetting\"],\r\n\t\t\t\tnoDataMessage: setting[\"noDataMessage\"] || \"No matching records found\",\r\n\t\t\t\tplaceHolder: setting[\"placeHolder\"] || \"\",\r\n\t\t\t\tsearchPlaceHolder: setting[\"searchPlaceHolder\"] || \"Search\",\r\n\t\t\t\tselectedCallback: setting[\"selectedCallback\"],\r\n\t\t\t\tdisabledCallback: setting[\"disabledCallback\"],\r\n\t\t\t\ttextSelectAll: setting[\"textSelectAll\"] || \"[Select all]\",\r\n\t\t\t\ttextAllSelected: setting[\"textAllSelected\"] || \"All Selected\",\r\n\t\t\t\t//'#' is replaced with the count of selected items, '%'is replaced with total items so '#' and '%' should be present\r\n\t\t\t\ttextSelectedCount: setting[\"textSelectedCount\"] || \"# of % selected\",\r\n\t\t\t\tsetTitle: Boolean.parse(setting[\"setTitle\"]),\r\n\t\t\t\tdisplayDelimiter: setting[\"displayDelimiter\"] || ', ',\r\n\t\t\t\tenableDefaultOpen:Boolean.parse(setting[\"enableDefaultOpen\"]),\r\n\t\t\t\tlabelRenderer:setting[\"labelRenderer\"],\r\n\t\t\t\tposition:setting[\"position\"] || \"bottom\",\r\n\t\t\t\tshowDropDownIcon:this.util.isUndefined(setting[\"showDropDownIcon\"]) ? true : Boolean.parse(setting[\"showDropDownIcon\"]),\r\n\t\t\t\tsearchInterval:setting[\"searchInterval\"] || 500,\r\n\t\t\t};\r\n\t\t\tthis.__config.dataSource = this.util.cloneObject(this.__config.dataSource,true);\r\n\t\t\tthis.__updateItems();\r\n\t\t\tthis.__config.filteredSource = this.__config.dataSource;\r\n\t\t\tthis.__updateTotalRecords();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__createComponent = function()\r\n\t{\r\n\t\tthis.util.addStyleClass(this.__baseComponent,\"nsMultiSelectDropdownContainer\");\r\n\t\tthis.__divLabelContainer = this.util.createDiv(this.getID() + \"LabelContainer\",\"nsLabelContainer\");\r\n\t\tthis.__spanLabel = this.util.createElement(\"span\",this.getID() + \"Label\",\"nsLabel\");\r\n\t\tthis.__divLabelContainer.appendChild(this.__spanLabel);\r\n\t\tif(this.__config.showDropDownIcon)\r\n\t\t{\r\n\t\t\tthis.__divArrow = this.util.createDiv(null,\"nsLabelArrow\");\r\n\t\t\tthis.__divLabelContainer.appendChild(this.__divArrow);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(this.__spanLabel,\"nsLabelNoArrow\");\r\n\t\t}\r\n\t\tthis.__divDropdownContainer = this.util.createDiv(this.getID() + \"DropdownContainer\",\"nsDropdownContainer\");\r\n\t\tvar style = (this.__config.position == \"top\") ? \"nsDropdownContainerTop\" : \"nsDropdownContainerBottom\";\r\n\t\tthis.util.addStyleClass(this.__divDropdownContainer,style);\r\n\t\tthis.__divSearchContainer = this.util.createDiv(this.getID() + \"SearchContainer\",\"nsDropdownSearchContainer\");\r\n\t\tthis.__txtSearch = this.util.createElement(\"input\",this.getID() + \"DropdownSearch\",\"nsDropdownSearch\");\r\n\t\t//this.__txtSearch.setAttribute(\"type\",\"search\");\r\n\t\tthis.__txtSearch.setAttribute(\"placeholder\",this.__config.searchPlaceHolder);\r\n\t\tthis.__divSearchContainer.appendChild(this.__txtSearch);\r\n\t\tthis.__divSearchIcon = this.util.createDiv(null,\"nsDropdownSearchIcon\");\r\n\t\tthis.__divSearchContainer.appendChild(this.__divSearchIcon);\r\n\t\tvar svgSearchIcon = \"<svg version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" \\r\\n\" + \r\n\t\t\t\t\"\t viewBox=\\\"0 0 56.966 56.966\\\" width=\\\"100%\\\" height=\\\"100%\\\" xml:space=\\\"preserve\\\">\\r\\n\" + \r\n\t\t\t\t\"<path d=\\\"M55.146,51.887L41.588,37.786c3.486-4.144,5.396-9.358,5.396-14.786c0-12.682-10.318-23-23-23s-23,10.318-23,23\\r\\n\" + \r\n\t\t\t\t\"\ts10.318,23,23,23c4.761,0,9.298-1.436,13.177-4.162l13.661,14.208c0.571,0.593,1.339,0.92,2.162,0.92\\r\\n\" + \r\n\t\t\t\t\"\tc0.779,0,1.518-0.297,2.079-0.837C56.255,54.982,56.293,53.08,55.146,51.887z M23.984,6c9.374,0,17,7.626,17,17s-7.626,17-17,17\\r\\n\" + \r\n\t\t\t\t\"\ts-17-7.626-17-17S14.61,6,23.984,6z\\\"/>\\r\\n\" + \r\n\t\t\t\t\"</svg>\";\r\n\t\tif(window.btoa)\r\n\t\t{\r\n\t\t\tvar svg64 = window.btoa(svgSearchIcon);\r\n\t\t\tthis.__divSearchIcon.style.backgroundImage = \"url('data:image/svg+xml;base64,\" + svg64 + \"')\";\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__divSearchIcon.innerHTML = svgSearchIcon;\r\n\t\t}\r\n\t\tthis.__divDropdownContainer.appendChild(this.__divSearchContainer);\r\n\t\tthis.__listContainer = this.util.createElement(\"div\",this.getID() + \"ListContainer\",\"nsListContainer\");\r\n\t\tthis.__divDropdownContainer.appendChild(this.__listContainer);\r\n\t\tthis.addChild(this.__divLabelContainer);\r\n\t\tthis.addChild(this.__divDropdownContainer);\r\n\t\tvar dropDownContainerCSS = {};\r\n\t\tif(this.__config[\"listWidth\"])\r\n\t\t{\r\n\t\t\tdropDownContainerCSS.width = this.__config[\"listWidth\"];\r\n\t\t}\r\n\t\t/*if(this.__config[\"listHeight\"])\r\n\t\t{\r\n\t\t\tdropDownContainerCSS.maxHeight = this.__config[\"listHeight\"];\r\n\t\t}*/\r\n\t\tif(this.__config[\"listHeight\"])\r\n\t\t{\r\n\t\t\tthis.__listContainer.style.maxHeight = this.__config[\"listHeight\"];\r\n\t\t\tif(this.__config.enableVirtualScroll)\r\n\t\t\t{\r\n\t\t\t\tthis.__listContainer.style.height = this.__config[\"listHeight\"];\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.util.css(this.__divDropdownContainer,dropDownContainerCSS);\r\n\t\tif(this.__config.enableVirtualScroll)\r\n\t\t{\r\n\t\t\tthis.__initVirtualScrolls();\r\n\t\t}\r\n\t\tthis.__applyDataSource(this.__config.dataSource);\r\n\t\tvar dropDownClickRef = this.__dropDownShowHandler.bind(this);\r\n\t\tthis.util.addEvent(this.__divLabelContainer,\"click\",dropDownClickRef);\r\n\t\tthis.util.addEvent(this.__txtSearch,\"input\",this.__searchHandler.bind(this));\r\n\t\tthis.util.addEvent(this.__txtSearch,\"click\",this.__txtSearchFocusHandler.bind(this));\r\n\t\tif(this.__config.enableDefaultOpen)\r\n\t\t{\r\n\t\t\tthis.__dropDownShowHandler();\r\n\t\t}\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,\"click\",this.__documentClickRef);\r\n\t\t}\r\n\t\tif(!this.__documentKeydownRef)\r\n\t\t{\r\n\t\t\tthis.__documentKeydownRef = this.__documentKeydownHandler.bind(this);\r\n\t\t\tthis.util.addEvent(document,\"keydown\",this.__documentKeydownRef);\r\n\t\t}\r\n\t\tthis.__changePropByLabelType();\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__changePropByLabelType = function(source)\r\n\t{\r\n\t\tswitch(this.__config.labelType)\r\n\t\t{\r\n\t\t\tcase NSMultiSelectDropdown.LABEL_TYPE_HORIZONTAL_LIST:\r\n\t\t\t{\r\n\t\t\t\t//commenting below line as IE does not support unset value\r\n\t\t\t\t/*this.__divLabelContainer.style.overflow = \"unset\";\r\n\t\t\t\tthis.__divLabelContainer.style.whiteSpace = \"unset\";\r\n\t\t\t\tthis.__spanLabel.style.overflow = \"unset\";\r\n\t\t\t\tthis.__spanLabel.style.whiteSpace = \"unset\";*/\r\n\t\t\t\t\r\n\t\t\t\tthis.__divLabelContainer.style.overflow = \"visible\";\r\n\t\t\t\tthis.__divLabelContainer.style.whiteSpace = \"normal\";\r\n\t\t\t\tthis.__spanLabel.style.overflow = \"visible\";\r\n\t\t\t\tthis.__spanLabel.style.whiteSpace = \"normal\";\r\n\t\t\t\t\r\n\t\t\t\t//this.__spanLabel.style.position = \"unset\";\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase NSMultiSelectDropdown.LABEL_TYPE_VERTICAL_LIST:\r\n\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\tNSMultiSelectDropdown.prototype.__applyDataSource = function(source)\r\n\t{\r\n\t\tthis.util.removeAllChildren(this.__listContainer);\r\n\t\tthis.__config.filteredSource = source;\r\n\t\tthis.__updateTotalRecords();\r\n\t\tif(this.__config.enableVirtualScroll)\r\n\t\t{\r\n\t\t\tvar length = (source && source.length > 0) ? source.length : 0;\r\n\t\t\tthis.__divScroller = this.__createScroller(this.__config.itemHeight * length);\r\n\t\t\tthis.__listContainer.appendChild(this.__divScroller);\r\n\t\t\tthis.__renderVirtualItems(0);\r\n\t\t\tthis.__update();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(source && source.length > 0)\r\n\t\t\t{\r\n\t\t\t\t for(var count = 0;count < source.length;count++)\r\n\t\t\t\t {\r\n\t\t\t\t\t var li = this.__createItem(source[count],count);\r\n\t\t\t\t\t this.__listContainer.appendChild(li);\r\n\t\t\t\t }\r\n\t\t\t\t this.__update();\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t var li = this.__createNoItemFound();\r\n\t\t\t\t this.__listContainer.appendChild(li);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__updateItems = function()\r\n\t{\r\n\t\tif(this.__config.enableVirtualScroll)\r\n\t\t{\r\n\t\t\tvar source = this.__config.dataSource;\r\n\t\t\tif(source && source.length > 0)\r\n\t\t\t{\r\n\t\t\t\t for(var count = 0;count < source.length;count++)\r\n\t\t\t\t {\r\n\t\t\t\t\t source[count][this.__fieldIndex] = count;\r\n\t\t\t\t }\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__createNoItemFound = function()\r\n\t{\r\n\t\tvar li = this.util.createElement(\"li\",null,\"nsListItem\");\r\n\t\tvar label = this.util.createElement(\"label\",null,\"nsListItemLabelContainer\");\r\n\t\tli.appendChild(label);\r\n\t\tvar spanLabel = this.util.createElement(\"span\",null,\"nsListLabel\");\r\n\t\tspanLabel.innerHTML = this.__config.noDataMessage;\r\n\t\tlabel.appendChild(spanLabel);\r\n\t\treturn li;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__initVirtualScrolls = function()\r\n\t{\r\n\t\tvar div = this.util.createDiv();\r\n\t\tdiv.style.height = this.__config[\"listHeight\"];\r\n\t\tdocument.body.appendChild(div);\r\n\t\tvar height = div.offsetHeight;\r\n\t\tdocument.body.removeChild(div);\r\n\t\tthis.__screenItemsLen = Math.ceil(height / this.__config.itemHeight);\r\n\t\tthis.__cachedItemsLen = this.__screenItemsLen * 3;\r\n\t\tthis.__lastRepaintY = -1;\r\n\t\tthis.__maxBuffer = this.__screenItemsLen * this.__config.itemHeight;\r\n\t\tthis.__lastScrolled = 0;\r\n\t\tthis.__itemHeight = this.__config.itemHeight;\r\n\t\tthis.util.addStyleClass(this.__listContainer,\"nsListContainerVirtual\");\r\n\t\tthis.__listContainerScrollRef = this.__listContainerScrollHandler.bind(this);\r\n\t\tthis.util.addEvent(this.__listContainer,\"scroll\",this.__listContainerScrollRef);\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__renderVirtualItems = function(from,source)\r\n\t{\r\n\t\tvar arrLi = this.__listContainer.querySelectorAll(\"li\");\r\n\t\tfor(var count = arrLi.length - 1;count > -1;count--)\r\n\t\t{\r\n\t\t\tarrLi[count].parentNode.removeChild(arrLi[count]);\r\n\t\t}\r\n\t\tsource = source ? source : this.__config.filteredSource;\r\n\t\tif(source)\r\n\t\t{\r\n\t\t\tvar finalItem = from + this.__cachedItemsLen;\r\n\t\t\tif (finalItem > this.__totalRecords)\r\n\t\t\t{\r\n\t\t\t\t finalItem = this.__totalRecords;\r\n\t\t\t}\r\n\t\t\tvar fragment = document.createDocumentFragment();\r\n\t\t\tfor(var count = from;count < finalItem;count++)\r\n\t\t\t{\r\n\t\t\t\t var li = this.__createItem(source[count],count);\r\n\t\t\t\t fragment.appendChild(li);\r\n\t\t\t}\r\n\t\t\tthis.__listContainer.appendChild(fragment);\r\n\t\t\t//this.__update();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__createItem = function(item,index)\r\n\t{\r\n\t\tif(this.util.isUndefined(item[this.__fieldChecked]))\r\n\t\t{\r\n\t\t\tvar isSelected = false;\r\n\t\t\tif(this.__config.selectedCallback)\r\n\t\t\t{\r\n\t\t\t\tisSelected = this.__config.selectedCallback(item,index);\r\n\t\t\t}\r\n\t\t\tthis.__setSelectUnselectInItem(item,isSelected);\r\n\t\t}\r\n\t\tif(this.util.isUndefined(item[this.__fieldDisabled]))\r\n\t\t{\r\n\t\t\tif(this.__config.disabledCallback)\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldDisabled] = this.__config.disabledCallback(item,index);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\titem[this.__fieldDisabled] = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(this.util.isUndefined(item[this.__fieldIndex]))\r\n\t\t{\r\n\t\t\titem[this.__fieldIndex] = index;\r\n\t\t}\r\n\t\tvar li = this.util.createElement(\"li\",null,\"nsListItem\");\r\n\t\tif(this.__config.enableVirtualScroll)\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(li,\"nsListItemVirtual\");\r\n\t\t\tli.style.top = (index * this.__config.itemHeight) + \"px\";\r\n\t\t}\r\n\t\tvar label = this.util.createElement(\"label\",null,\"nsListItemLabelContainer\");\r\n\t\tif(item[this.__fieldDisabled])\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(label,\"nsListItemDisabled\");\r\n\t\t}\r\n\t\tli.appendChild(label);\r\n\t\tvar checkBox = this.util.createElement(\"input\",null,\"nsListCheckbox\");\r\n\t\tcheckBox.setAttribute(\"type\",\"checkbox\");\r\n\t\tcheckBox.setAttribute(\"value\",item[this.__fieldIndex]);\r\n\t\tif(item[this.__fieldChecked])\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(li,\"nsListItemSelected\");\r\n\t\t}\r\n\t\tcheckBox.checked = item[this.__fieldChecked];\r\n\t\tlabel.appendChild(checkBox);\r\n\t\tthis.util.addEvent(li,\"click\",this.__itemClickHandler.bind(this,item,li));\r\n\t\tthis.util.addEvent(checkBox,\"click\",this.__checkBoxClickHandler.bind(this,item,checkBox,li));\r\n\t\tvar spanLabel = this.util.createElement(\"span\",null,\"nsListLabel\");\r\n\t\tspanLabel.innerHTML = this.__getText(item);\r\n\t\tlabel.appendChild(spanLabel);\r\n\t\treturn li;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__listContainerScrollHandler = function(event)\r\n\t{\r\n\t\tif(!this.__interval || this.__interval == -1)\r\n\t\t{\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tvar target = this.util.getTarget(event);\r\n\t\t\tvar scrollTop = target.scrollTop;\r\n\t\t\tif(this.__lastRepaintY == -1 || Math.abs(scrollTop - this.__lastRepaintY) > this.__maxBuffer)\r\n\t\t\t{\r\n\t\t\t\tvar first = parseInt(scrollTop / this.__config.itemHeight) - this.__screenItemsLen;\r\n\t\t\t this.__renderVirtualItems(first < 0 ? 0 : first);\r\n\t\t\t this.__lastRepaintY = scrollTop;\r\n\t\t\t}\r\n\t\t\tthis.__lastScrolled = Date.now();\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__documentClickHandler = function(event)\r\n\t{\r\n\t\tif(this.__isFocusOnControl())\r\n\t\t{\r\n\t\t\tthis.__closeDropdown();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__documentKeydownHandler = function(event)\r\n\t{\r\n\t\tif(this.__isFocusOnControl())\r\n\t\t{\r\n\t\t\tevent = this.util.getEvent(event);\r\n\t\t\tvar keyCode = this.util.getKeyUnicode(event);\r\n\t\t\tif (keyCode == this.util.KEYCODE.ESC) \r\n\t\t\t{\r\n\t\t\t\tthis.__closeDropdown();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__dropDownShowHandler = function(event)\r\n\t{\r\n\t\tthis.util.toggleStyleClass(this.__divLabelContainer,\"nsLabelContainerActive\");\r\n\t\tthis.util.toggleStyleClass(this.__divDropdownContainer,\"nsListShow\");\r\n\t\tthis.util.hasStyleClass(this.__divDropdownContainer,\"nsListShow\")? this.__dispatchEvent(NSMultiSelectDropdown.DROPDOWN_OPEN): this.__dispatchEvent(NSMultiSelectDropdown.DROPDOWN_CLOSE, {selected: this.__getSelectItems()}, {selected: this.__getSelectItems()});\r\n\t\tif(event)\r\n\t\t{\r\n\t\t\tevent = this.util.getEvent();\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__itemClickHandler = function(item,li,event)\r\n\t{\r\n\t\tif(event)\r\n\t\t{\r\n\t\t\tevent = this.util.getEvent();\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__checkBoxClickHandler = function(item,checkBox,li,event)\r\n\t{\r\n\t\t//below line is not working for some reason\r\n\t\t//item[this.__fieldChecked] = checkBox.checked;\r\n\t\tvar index = parseInt(checkBox.getAttribute(\"value\"));\r\n\t\tvar tempItem = this.__getItemByIndex(index); \r\n\t\tif(tempItem)\r\n\t\t{\r\n\t\t\tthis.__setSelectUnselectInItem(tempItem,checkBox.checked);\r\n\t\t\tthis.__update();\r\n\t\t\tthis.__dispatchEvent(NSMultiSelectDropdown.DROPDOWN_ITEM_CLICK,tempItem,{index:index,item:tempItem});\r\n\t\t}\r\n\t\tif(event)\r\n\t\t{\r\n\t\t\tevent = this.util.getEvent();\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__searchHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tclearTimeout(this.__interval);\r\n\t\tthis.__interval = -1;\r\n\t\tvar self = this;\r\n\t\tthis.__interval = setTimeout(function(){\r\n\t\t\t\tself.__filterList.bind(self)();\r\n\t\t}, this.__config.searchInterval);\r\n\t\t\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__filterList = function()\r\n\t{\r\n\t\tvar filterSetting = this.__config.filterSetting;\r\n\t\tvar strData = this.__txtSearch.value;\r\n\t\tthis.__filter(strData,filterSetting,false,-1);\r\n\t\tthis.__interval = -1;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__txtSearchFocusHandler = function(event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tevent.stopPropagation();\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__createScroller = function(height)\r\n\t{\r\n\t\tvar scroller = this.util.createDiv(null,\"nsMultiSelectScroller\");\r\n\t\tscroller.style.height = height + \"px\";\r\n\t\treturn scroller;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__update = function()\r\n\t{\r\n\t\tvar selected = this.__getSelectItems();\r\n\t\tvar length = selected.items.length;\r\n\t\tvar html = \"\";\r\n\t\tvar isPlaceHolder = true;\r\n\t\tvar setTitle = true;\r\n\t\tvar setHeight = true;\r\n\t\tif(length == 0)\r\n\t\t{\r\n\t\t\tisPlaceHolder = true;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tisPlaceHolder = false;\r\n\t\t\tvar labelRenderer = null;\r\n\t\t\tif(this.__config.labelRenderer)\r\n\t\t\t{\r\n\t\t\t\tlabelRenderer = this.__config.labelRenderer;\r\n\t\t\t}\r\n\t\t\telse if(this.__config.labelType == NSMultiSelectDropdown.LABEL_TYPE_OF_TEXT)\r\n\t\t\t{\r\n\t\t\t\tlabelRenderer = this.__labelFunctionForOfText.bind(this);\r\n\t\t\t\tsetTitle = true;\r\n\t\t\t\tsetHeight = false;\r\n\t\t\t}\r\n\t\t\telse if(this.__config.labelType == NSMultiSelectDropdown.LABEL_TYPE_HORIZONTAL_LIST)\r\n\t\t\t{\r\n\t\t\t\tlabelRenderer = this.__labelFunctionForHorizontalList.bind(this);\r\n\t\t\t\tsetTitle = true;\r\n\t\t\t\tsetHeight = true;\r\n\t\t\t}\r\n\t\t\telse if(this.__config.labelType == NSMultiSelectDropdown.LABEL_TYPE_VERTICAL_LIST)\r\n\t\t\t{\r\n\t\t\t\tlabelRenderer = this.__labelFunctionForVerticalList.bind(this);\r\n\t\t\t\tsetTitle = true;\r\n\t\t\t\tsetHeight = true;\r\n\t\t\t}\r\n\t\t\tif(labelRenderer)\r\n\t\t\t{\r\n\t\t\t\tvar html = labelRenderer(selected.items,selected.indexes,selected.texts,this.__config.labelField);\r\n\t\t\t\tif(html)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar height = \"\";\r\n\t\t\t\t\tif(this.util.isString(html))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__spanLabel.innerHTML = html;\r\n\t\t\t\t\t\tvar span = this.util.createElement(\"span\");\r\n\t\t\t\t\t\tspan.innerHTML = html;\r\n\t\t\t\t\t\tif(setHeight)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tdocument.body.appendChild(span);\r\n\t\t\t\t\t\t\theight = span.offsetHeight;\r\n\t\t\t\t\t\t\tdocument.body.removeChild(span);\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\tthis.__spanLabel.innerHTML = \"\";\r\n\t\t\t\t\t\tthis.__spanLabel.appendChild(html);\r\n\t\t\t\t\t\tif(setHeight)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\theight = html.offsetHeight;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(setHeight)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__divLabelContainer.style.height = height + \"px\";\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\tisPlaceHolder = true;\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\tisPlaceHolder = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(isPlaceHolder)\r\n\t\t{\r\n\t\t\tthis.__divLabelContainer.style.height = \"\";\r\n\t\t\tthis.util.addStyleClass(this.__spanLabel,\"nsLabelPlaceHolder\");\r\n\t\t\tthis.__spanLabel.innerHTML = this.__config.placeHolder;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.util.removeStyleClass(this.__spanLabel,\"nsLabelPlaceHolder\");\r\n\t\t}\r\n\t\tif (this.__config.setTitle && setTitle) \r\n\t\t{\r\n\t\t\tthis.__spanLabel.setAttribute(\"title\",selected.texts.join(this.__config.displayDelimiter));\r\n }\r\n\t\tthis.__updateCheckBoxes();\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__labelFunctionForOfText = function(items,indexes,texts,labelField)\r\n\t{\r\n\t\tvar length = items.length;\r\n\t\tvar sourceLength = (this.__config.dataSource && this.__config.dataSource.length) ? this.__config.dataSource.length : 0;\r\n\t\tvar html = \"\";\r\n\t\tif(length == sourceLength)\r\n\t\t{\r\n\t\t\thtml = this.__config.textAllSelected;\r\n\t\t}\r\n\t\telse if(this.__config.truncateText && length > this.__config.countAfterShowText) \r\n\t\t{\r\n\t\t\thtml = texts.slice(0,this.__config.countAfterShowText) + \"...\";\r\n }\r\n\t\telse if(length > this.__config.countAfterShowText) \r\n\t\t{\r\n\t\t\thtml = this.__config.textSelectedCount.replace(\"#\",length).replace(\"%\", sourceLength);\r\n } \r\n\t\telse \r\n\t\t{\r\n\t\t\thtml = texts.join(this.__config.displayDelimiter);\r\n }\r\n\t\treturn html;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__labelFunctionForHorizontalList = function(items,indexes,texts,labelField)\r\n\t{\r\n\t\tvar length = items.length;\r\n\t\tvar divContainer = this.util.createDiv(null,\"nsHorizontalListContainer\");\r\n\t\tvar tag = null;\r\n\t\tfor(var count = 0;count < texts.length;count++)\r\n\t\t{\r\n\t\t\ttag = this.__createHorizontalListItem(texts[count],items[count],indexes[count]);\r\n\t\t\tdivContainer.appendChild(tag);\r\n\t\t}\r\n\t\treturn divContainer;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__createHorizontalListItem = function(text,item,index) \r\n\t{\r\n\t\tvar tag = this.util.createDiv(null,\"nsHorizontalListItemTag\");\r\n\t var content = this.util.createDiv(null,\"nsHorizontalListItemText\");\r\n\t content.textContent = text;\r\n\t tag.appendChild(content);\r\n\t var btnRemove = this.util.createDiv(null,\"nsHorizontalListItemClose\");\r\n\t this.util.addEvent(btnRemove,\"click\",this.__removeHorizontalListItem.bind(this,tag,item,index));\r\n\t tag.appendChild(btnRemove);\r\n\t return tag;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__removeHorizontalListItem = function(tag,item,index,event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tif(event)\r\n\t\t{\r\n\t\t\tevent.stopImmediatePropagation();\r\n\t\t}\r\n\t\tthis.setSelectUnselectItems(item,false);\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__labelFunctionForVerticalList = function(items,indexes,texts,labelField)\r\n\t{\r\n\t\tvar length = items.length;\r\n\t\tvar ul = this.util.createElement(\"ul\",null,\"nsVerticalListContainer\");\r\n\t\tvar tag = null;\r\n\t\tfor(var count = 0;count < texts.length;count++)\r\n\t\t{\r\n\t\t\ttag = this.__createVerticalListItem(texts[count],items[count],indexes[count]);\r\n\t\t\tul.appendChild(tag);\r\n\t\t}\r\n\t\treturn ul;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__createVerticalListItem = function(text,item,index) \r\n\t{\r\n\t\tvar li = this.util.createElement(\"li\",null,\"nsVerticalListItemTag\");\r\n\t\tvar div = this.util.createDiv(null,\"nsVerticalListItemText\");\r\n div.appendChild(document.createTextNode(text));\r\n li.appendChild(div);\r\n var btnRemove = this.util.createDiv(null,\"nsVerticalListItemClose\");\r\n\t\tthis.util.addEvent(btnRemove,\"click\",this.__removeVerticalListItem.bind(this,li,item,index));\r\n\t\tli.appendChild(btnRemove);\r\n\t\treturn li;\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__removeVerticalListItem = function(tag,item,index,event) \r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tif(event)\r\n\t\t{\r\n\t\t\tevent.stopImmediatePropagation();\r\n\t\t}\r\n\t\tthis.setSelectUnselectItems(item,false);\r\n\t};\r\n\t\r\n\tNSMultiSelectDropdown.prototype.__updateCheckBoxes = function()\r\n\t{\r\n\t\tvar arrCheckBoxes = this.__listContainer.querySelectorAll(\"input.nsListCheckbox[type=checkbox]\");\r\n\t\tif(arrCheckBoxes && arrCheckBoxes.length > 0)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < arrCheckBoxes.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar checkBox = arrCheckBoxes[count];\r\n\t\t\t\tvar index = parseInt(checkBox.getAttribute(\"value\"));\r\n\t\t\t\tvar item = this.__getItemByIndex(index);\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tcheckBox.checked = item[this.__fieldChecked];\r\n\t\t\t\t\tvar li = this.util.findParent(checkBox,\"LI\");\r\n\t\t\t\t\tif(li)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[this.__fieldChecked] ? this.util.addStyleClass(li,\"nsListItemSelected\") : this.util.removeStyleClass(li,\"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\tNSMultiSelectDropdown.prototype.__getSelectItems = function()\r\n\t{\r\n\t\tvar retValue = {texts:[],indexes:[],items:[]};\r\n\t\t/*if(this.__config.dataSource && this.__config.dataSource.length > 0)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < this.__config.dataSource.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar item = this.__config.dataSource[count];\r\n\t\t\t\tif(item[this.__fieldChecked])\r\n\t\t\t\t{\r\n\t\t\t\t\tretValue.texts.push(this.__getText(item));\r\n\t\t\t\t\tretValue.indexes.push(count);\r\n\t\t\t\t\tretValue.items.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}*/\r\n\t\tif(this.__config.dataSource && this.__config.dataSource.length && this.__arrSelectedItems && this.__arrSelectedItems.length)\r\n\t\t{\r\n\t\t\tfor(var count = 0;count < this.__arrSelectedItems.length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar item = this.__arrSelectedItems[count];\r\n\t\t\t\tretV