export declare const NSNavigationCode = "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);\"use strict\";\r\nvar NSFloatingLabel = (function()\r\n{\r\n\tfunction NSFloatingLabel(setting) \r\n\t{\r\n\t\tvar config = null;\r\n\t\t\r\n\t\tvar self = this;\r\n\t\tvar util = null;\r\n\t\t\r\n\t\tvar container = null;\r\n\t\tvar conContainer = null;\r\n\t\tvar control = null;\r\n\t\tvar label = null;\r\n\t\tvar id = null;\r\n\t\tvar parentElement = null;\r\n\t\tvar isTxtBoxID = false;\r\n\t\tvar typeCssClass = null;\r\n        \r\n        var initialize = function()\r\n    \t{\r\n    \t\tutil = new NSUtil();\r\n    \t\tif(!setting)\r\n    \t\t{\r\n    \t\t\tsetting = {};\r\n    \t\t}\r\n    \t\tconfig = {\r\n    \t\t\t\tcontainer: setting[\"container\"],\r\n    \t\t\t\tcontrol: setting[\"control\"],\r\n    \t\t\t\tlabel: setting[\"label\"],\r\n    \t\t\t\tcontrolType: setting[\"controlType\"] || (setting.control ? setting.control.nodeName.toLowerCase() : null) || \"input\",\r\n    \t\t\t\tinputType: setting[\"inputType\"] || \"text\",// used when controlType is \"input\"\r\n    \t\t\t\tposition: setting[\"position\"] ? (setting[\"position\"].charAt(0).toUpperCase() + setting[\"position\"].slice(1)) : \"Top\",\r\n    \t\t\t\ttopPosition: setting[\"topPosition\"] ? (setting[\"topPosition\"].charAt(0).toUpperCase() + setting[\"topPosition\"].slice(1)) : \"Middle\",\r\n    \t\t\t\ttheme: setting[\"theme\"] ? (setting[\"theme\"].charAt(0).toUpperCase() + setting[\"theme\"].slice(1)) : \"White\"\r\n    \t\t};\r\n    \t\tif(!config.container && !config.control)\r\n    \t\t{\r\n    \t\t\tutil.throwNSError(\"NSFloatingLabel\",\"Enter a valid container or a control\");\r\n    \t\t}\r\n    \t\tif(!config.label || !config.label.length)\r\n    \t\t{\r\n    \t\t\tutil.throwNSError(\"NSFloatingLabel\",\"Enter a valid Label\");\r\n    \t\t}\r\n    \t\tif(!setting.customClass)\r\n    \t\t{\r\n    \t\t\tsetting.customClass = {};\r\n    \t\t}\r\n    \t\tconfig.customClass = {container:setting.customClass[\"container\"],control:setting.customClass[\"control\"],controlFocus:setting.customClass[\"controlFocus\"],\r\n    \t\t\t\t\t\t\t  label:setting.customClass[\"label\"]};\r\n    \t\tsetTypeCssClass();\r\n    \t\tcreateComponent();\r\n    \t\tsetTheme(config.theme);\r\n    \t};\r\n    \t\r\n    \tvar createComponent = function()\r\n    \t{\r\n    \t\tcontrol = config.control;\r\n    \t\tvar txtID = null;\r\n    \t\tif(control)\r\n    \t\t{\r\n    \t\t\ttxtID = getID();\r\n    \t\t\tif(!isTxtBoxID)\r\n    \t\t\t{\r\n    \t\t\t\ttxtID = txtID + \"Txt\";\r\n    \t\t\t\tcontrol.setAttribute(\"id\",txtID);\r\n    \t\t\t\tcontrol.setAttribute(\"name\",txtID);\r\n    \t\t\t}\r\n    \t\t\tcontainer = util.createElement(\"div\",getID() + \"Container\",getContainerClass());\r\n    \t\t\tparentElement = control.parentElement;\r\n    \t\t\tparentElement.insertBefore(container,control);\r\n    \t\t}\r\n    \t\telse\r\n    \t\t{\r\n    \t\t\tcontainer = config.container;\r\n    \t\t\tutil.addStyleClass(container,getContainerClass());\r\n    \t\t\ttxtID = getID() + \"TxtLabel\";\r\n    \t\t\tcontrol = util.createElement(config.controlType,txtID,null);\r\n    \t\t\tif(config.controlType == \"input\")\r\n    \t\t\t{\r\n    \t\t\t\tcontrol.setAttribute(\"type\",config.inputType);\r\n    \t\t\t}\r\n    \t\t\tcontrol.setAttribute(\"name\",txtID);\r\n    \t\t}\r\n    \t\tcontrol.setAttribute(\"placeholder\",config.label);\r\n    \t\tconContainer = util.createElement(\"div\",getID() + \"ConContainer\",\"nsFloatingLabelConatiner\");\r\n    \t\tutil.addStyleClass(control,\"nsFloatingLabelControl \" + ((config.controlType == \"input\") ? \"nsFloatingLabelInput\" : \"nsFloatingLabelTextArea\"));\r\n    \t\tutil.addEvent(control,\"focus\",controlFocusListener);\r\n    \t\tutil.addEvent(control,\"blur\",controlBlurListener);\r\n    \t\tutil.addEvent(control,\"change input blur reset\",controlEventListener);\r\n    \t\tconContainer.appendChild(control);\r\n    \t\tapplyCustomClass(container,\"container\");\r\n    \t\tapplyCustomClass(control,\"control\");\r\n    \t\tlabel = util.createElement(\"label\",txtID + \"Label\",\"nsFloatingLabelLabel\");\r\n    \t\tlabel.setAttribute(\"for\",txtID);\r\n    \t\tlabel.innerHTML = config.label;\r\n    \t\tapplyCustomClass(label,\"label\");\r\n    \t\tconContainer.appendChild(label);\r\n    \t\tcontainer.appendChild(conContainer);\r\n    \t};\r\n    \t\r\n    \tvar controlFocusListener = function(event)\r\n    \t{\r\n    \t\tevent = util.getEvent(event);\r\n    \t\tcontrolEventListener(event);\r\n    \t\tutil.addStyleClass(container,\"nsFloatingLabelFocus\");\r\n    \t\tutil.addStyleClass(control,\"nsFloatingLabelControlFocus\");\r\n    \t};\r\n    \t\r\n    \tvar controlBlurListener = function(event)\r\n    \t{\r\n    \t\tevent = util.getEvent(event);\r\n    \t\tcontrolEventListener(event);\r\n    \t\tutil.removeStyleClass(container,\"nsFloatingLabelFocus\");\r\n    \t\tutil.removeStyleClass(control,\"nsFloatingLabelControlFocus\");\r\n    \t};\r\n    \t\r\n    \tvar controlEventListener = function(event)\r\n    \t{\r\n    \t\tevent = util.getEvent(event);\r\n    \t\tmanageFocusCss((control.value && control.value.length) ? true : false);\r\n    \t\tredispatchEvent(event);\r\n    \t};\r\n    \t\r\n    \tvar manageFocusCss = function(isSet)\r\n    \t{\r\n    \t\tisSet ? addFocusCss() : removeFocusCss();\r\n    \t};\r\n    \t\r\n    \tvar addFocusCss = function()\r\n    \t{\r\n    \t\tutil.addStyleClass(container,\"nsFloatingLabelActive\");\r\n    \t\tutil.addStyleClass(control,typeCssClass);\r\n\t\t\tapplyCustomClass(control,\"controlFocus\");\r\n\t\t\tapplyCustomClass(label,\"label\");\r\n    \t};\r\n    \t\r\n    \tvar removeFocusCss = function()\r\n    \t{\r\n    \t\tutil.removeStyleClass(container,\"nsFloatingLabelActive\");\r\n    \t\tutil.removeStyleClass(control,typeCssClass);\r\n\t\t\tremoveCustomClass(control,\"controlFocus\");\r\n\t\t\tremoveCustomClass(label,\"label\");\r\n    \t};\r\n    \t\r\n    \tvar getContainerClass = function()\r\n    \t{\r\n    \t\tvar retValue = \"nsFloatingLabel nsFloatingLabel\" + config.position;\r\n    \t\tif(config.position == \"Top\")\r\n    \t\t{\r\n    \t\t\tretValue += \" nsFloatingLabel\" + config.position + config.topPosition;\r\n    \t\t}\r\n    \t\treturn retValue;\r\n    \t};\r\n    \t\r\n    \tvar getID = function()\r\n    \t{\r\n    \t\tif(!id)\r\n    \t\t{\r\n    \t\t\tif(config.control && (config.control.hasAttribute(\"id\") || config.control.hasAttribute(\"name\")))\r\n        \t\t{\r\n    \t\t\t\tid = config.control.getAttribute(\"id\") || config.control.getAttribute(\"name\");\r\n    \t\t\t\tisTxtBoxID = true;\r\n        \t\t}\r\n        \t\telse if(config.container && (config.container.hasAttribute(\"id\") || config.container.hasAttribute(\"name\")))\r\n        \t\t{\r\n        \t\t\tid = config.container.getAttribute(\"id\") || config.container.getAttribute(\"name\");\r\n        \t\t}\r\n    \t\t\telse\r\n    \t\t\t{\r\n    \t\t\t\tid = \"comp\" + util.getUniqueId();\r\n    \t\t\t}\r\n    \t\t}\r\n    \t\treturn id;\r\n    \t};\r\n    \t\r\n    \tvar applyCustomClass = function(element,type)\r\n    \t{\r\n    \t\tif(element && type && config.customClass[type])\r\n    \t\t{\r\n    \t\t\tutil.addStyleClass(element,config.customClass[type]);\r\n    \t\t}\r\n    \t};\r\n    \t\r\n    \tvar removeCustomClass = function(element,type)\r\n    \t{\r\n    \t\tif(element && type && config.customClass[type])\r\n    \t\t{\r\n    \t\t\tutil.removeStyleClass(element,config.customClass[type]);\r\n    \t\t}\r\n    \t};\r\n    \t\r\n    \tvar setTypeCssClass = function()\r\n    \t{\r\n    \t\tvar controlType = null;\r\n    \t\tswitch(config.controlType.toLowerCase())\r\n    \t\t{\r\n    \t\t\tcase \"input\":\r\n    \t\t\t\tcontrolType = \"Input\";\r\n    \t\t\tbreak;\r\n    \t\t\tcase \"textarea\":\r\n    \t\t\t\tcontrolType = \"TextArea\";\r\n        \t\tbreak;\r\n        \t\tdefault:\r\n        \t\t\tcontrolType = \"Input\";\r\n        \t\tbreak;\r\n    \t\t}\r\n    \t\ttypeCssClass = \"nsFloatingLabel\" + controlType + \"Active\";\r\n    \t};\r\n    \t\r\n    \tvar redispatchEvent = function(event)\r\n    \t{\r\n    \t\t//control is not given but container is given as input\r\n    \t\tif(!parentElement)\r\n    \t\t{\r\n    \t\t\tutil.redispatchEvent(container,event);\r\n    \t\t}\r\n    \t};\r\n    \t\r\n    \tvar setAttribute = function(prop,value)\r\n    \t{\r\n    \t\tcontrol.setAttribute(prop,value);\r\n    \t};\r\n    \t\r\n    \tvar getAttribute = function(prop)\r\n    \t{\r\n    \t\treturn control.getAttribute(prop);\r\n    \t};\r\n    \t\r\n    \tvar value = function(value)\r\n    \t{\r\n    \t\tif(!util.isUndefined(value))\r\n    \t\t{\r\n    \t\t\tcontrol.value = value;\r\n    \t\t}\r\n    \t\treturn control.value;\r\n    \t};\r\n    \t\r\n    \tvar getControl = function()\r\n    \t{\r\n    \t\treturn control;\r\n    \t};\r\n    \t\r\n    \tvar setTheme = function(theme) \r\n    \t{\r\n    \t\tif(container && config.theme)\r\n    \t\t{\r\n    \t\t\tutil.removeStyleClass(container,\"nsFloatingLabel\" + config.theme);\r\n    \t\t\tconfig.theme = theme;\r\n    \t\t\tutil.addStyleClass(container,\"nsFloatingLabel\" + config.theme);\r\n    \t\t}\r\n    \t};\r\n    \t\r\n    \tvar destroy = function() \r\n    \t{\r\n    \t\tif(container && control)\r\n    \t\t{\r\n    \t\t\tif(parentElement)\r\n        \t\t{\r\n        \t\t\tparentElement.insertBefore(control,container);\r\n        \t\t\tcontainer.parentElement.removeChild(container);\r\n        \t\t\tcontainer = null;\r\n        \t\t\tif(!isTxtBoxID)\r\n        \t\t\t{\r\n        \t\t\t\tcontrol.setAttribute(\"id\",null);\r\n        \t\t\t\tcontrol.setAttribute(\"name\",null);\r\n        \t\t\t}\r\n        \t\t}\r\n    \t\t}\r\n    \t\telse\r\n    \t\t{\r\n    \t\t\tconContainer.parentElement.removeChild(conContainer);\r\n    \t\t}\r\n    \t};\r\n    \t\r\n    \tinitialize();\r\n    \t\r\n    \tself.value = value;\r\n    \tself.getAttribute = getAttribute;\r\n    \tself.setAttribute = setAttribute;\r\n    \tself.setTheme = setTheme;\r\n    \tself.getControl = getControl;\r\n    \tself.destroy = destroy;\r\n\t};\r\n\t\r\n\treturn NSFloatingLabel;\r\n})();\r\nnsModuleExport(this,\"NSFloatingLabel\",NSFloatingLabel);var NSNavigation = (function()\r\n{\r\n\tfunction NSNavigation(component,setting) \r\n\t{\r\n\t\tthis.__setting = setting;\r\n\t\t\r\n\t\tthis.__navigationContainerParent = null;\r\n\t\tthis.__navigationContainer = null;\r\n\t\tthis.__conSearch = null;\r\n\t\tthis.__txtSearch = null;\r\n\t\t\r\n\t\tthis.__config = null;\r\n\t\tthis.__domVar = null;\r\n\t\tthis.__selectedParentMenuItem = null;\r\n\t\tthis.__selectedMenu = null;\r\n\t\tthis.__selectedMenuItem = null;\r\n\t\tthis.__isNavOpen = false;\r\n\t\tthis.__dynamicContainer = null;\r\n\t\tthis.__isDataHierarchical = false;\r\n\t\tthis.__nsFloatingLabel = null;\r\n\t\t\r\n\t\tthis.__fieldPrefix = \"__ns_nav_field\";\r\n\t\tthis.__fieldIsOpen = this.__fieldPrefix + \"_open\";\r\n\t\tthis.__fieldElement = this.__fieldPrefix + \"_element\";\r\n\t\tthis.__fieldChildContainer = this.__fieldPrefix + \"_childcontainer\";\r\n\t\tthis.__fieldChildMenuIconContainer = this.__fieldPrefix + \"_menuiconcontainer\";\r\n\t\tthis.__fieldParentMenuItem = this.__fieldPrefix + \"_parentmenuitem\";\r\n\t\t\r\n\t\tthis.__headerItem = null;\r\n\t\tthis.__headerItemHeight = 0;\r\n\t\tthis.__interval = null;\r\n\t\t\r\n\t\t\t\t\t\r\n\t\tthis.base.__setBaseComponent.call(this,component);\r\n\t};\r\n\t\r\n\tnsExtendPrototype(NSContainerBase,NSNavigation);\r\n\tNSNavigation.prototype.constructor = NSNavigation;\r\n\t\r\n\tNSNavigation.prototype.initializeComponent = function() \r\n\t{\r\n\t\tthis.base.initializeComponent.call(this);\r\n\t\tthis.__domVar = this.util.getDomVariables();\r\n\t\tthis.__setSetting();\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.setComponentProperties = function() \r\n\t{\r\n\t\tthis.base.setComponentProperties.call(this);\r\n\t\tif(this.__config.dataSource)\r\n\t\t{\r\n\t\t\tthis.dataSource(this.__config.dataSource);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.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\tNSNavigation.prototype.removeComponent = function() \r\n\t{\r\n\t\tthis.base.removeComponent.call(this);\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.componentResized = function(event) \r\n\t{\r\n\t\tthis.base.componentResized.call(this,event);\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.isNavOpen = function()\r\n\t{\r\n\t\treturn this.__isNavOpen;\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.toggleNavigation = function()\r\n\t{\r\n\t\tif(this.__isNavOpen)\r\n\t\t{\r\n\t\t\tthis.closeNavigation();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.openNavigation();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.openNavigation = function()\r\n\t{\r\n\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.NAVIGATION_OPEN_START);\r\n\t\tthis.util.removeStyleClass(this.__config.containerElement,\"nsNavCollapsed\");\r\n\t\tthis.__isNavOpen = true;\r\n\t\tvar self = this;\r\n\t\tvar transitionEndCallback = function()\r\n\t\t{\r\n\t\t\tself.__resizeContentContainer();\r\n\t\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.NAVIGATION_OPEN_END);\r\n\t\t};\r\n\t\tvar transition = new this.util.transition(this.__baseComponent,transitionEndCallback.bind(this));\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.closeNavigation = function()\r\n\t{\r\n\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.NAVIGATION_CLOSE_START);\r\n\t\tthis.util.addStyleClass(this.__config.containerElement,\"nsNavCollapsed\");\r\n\t\tthis.__isNavOpen = false;\r\n\t\tvar self = this;\r\n\t\tvar transitionEndCallback = function()\r\n\t\t{\r\n\t\t\tself.__resizeContentContainer();\r\n\t\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.NAVIGATION_CLOSE_END);\r\n\t\t};\r\n\t\tvar transition = new this.util.transition(this.__baseComponent,transitionEndCallback.bind(this));\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.getItemByField = function(field,value,source)\r\n\t{\r\n\t\treturn this.__getItemByField(field,value,source);\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.selectMenu = function(itemOrElement)\r\n\t{\r\n\t\tvar item = null;\r\n\t\tif(this.util.isElement(itemOrElement))\r\n\t\t{\r\n\t\t\titem = this.__getItemByElement(itemOrElement);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\titem = itemOrElement;\r\n\t\t}\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\tthis.__handleSelectedMenu(item);\r\n\t\t\tthis.__invokeMenuClickHandler(item,null);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.dataSource = function(source)\r\n\t{\r\n\t\tif(source) {\r\n\t\t\tthis.__config.dataSource = source;\r\n\t\t\tthis.__config.orignalDataSource = this.__config.dataSource ? this.__config.dataSource.slice(0) : [];\r\n\t\t\tthis.__isDataHierarchical = false;\r\n\t\t\tif(source && source.length)\r\n\t\t\t{\r\n\t\t\t\tvar item = null;\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\titem = source[count];\r\n\t\t\t\t\tif(this.__hasChildren(item))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.__isDataHierarchical = true;\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\tthis.__renderItems();\r\n\t\t}\r\n\t\treturn this.__config.dataSource;\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.setTheme = function(theme)\r\n\t{\r\n\t\tthis.base.setTheme.call(this,theme);\r\n\t\tif(this.__nsFloatingLabel)\r\n\t\t{\r\n\t\t\tthis.__nsFloatingLabel.setTheme(theme);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.collapse = function(item)\r\n\t{\r\n\t\tif(item && item[this.__fieldElement] && this.__hasChildren(item) && item[this.__fieldIsOpen])\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tthis.util.removeStyleClass(item[this.__fieldElement],\"nsNavItemOpen\");\r\n\t\t\tthis.util.removeStyleClass(item[this.__fieldElement],\"nsNavItemActive\");\r\n\t\t\tif(item[this.__fieldChildContainer])\r\n\t\t\t{\r\n\t\t\t\tif(this.__config.enableAnimation)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.slideUp(item[this.__fieldChildContainer],20,function(element){\r\n\t\t\t\t\t\tself.util.removeStyleClass(item[self.__fieldChildContainer],\"nsNavSubNavContainerVisible\");\r\n\t\t\t\t\t\titem[self.__fieldChildMenuIconContainer].innerHTML = self.__config.iconMenuCollapsed;\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.util.removeStyleClass(item[this.__fieldChildContainer],\"nsNavSubNavContainerVisible\");\r\n\t\t\t\t\titem[this.__fieldChildMenuIconContainer].innerHTML = this.__config.iconMenuCollapsed;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\titem[this.__fieldIsOpen] = false;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.expand = function(item)\r\n\t{\r\n\t\tif(item && item[this.__fieldElement] && this.__hasChildren(item) && !item[this.__fieldIsOpen])\r\n\t\t{\r\n\t\t\tvar self = this;\r\n\t\t\tthis.util.addStyleClass(item[this.__fieldElement],\"nsNavItemOpen\");\r\n\t\t\tthis.util.addStyleClass(item[this.__fieldElement],\"nsNavItemActive\");\r\n\t\t\tif(item[this.__fieldChildContainer])\r\n\t\t\t{\r\n\t\t\t\tif(this.__config.enableAnimation)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.slideDown(item[this.__fieldChildContainer],20,function(element){\r\n\t\t\t\t\t\tself.util.addStyleClass(item[self.__fieldChildContainer],\"nsNavSubNavContainerVisible\");\r\n\t\t\t\t\t\titem[self.__fieldChildMenuIconContainer].innerHTML = self.__config.iconMenuExpanded;\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.util.addStyleClass(item[this.__fieldChildContainer],\"nsNavSubNavContainerVisible\");\r\n\t\t\t\t\titem[this.__fieldChildMenuIconContainer].innerHTML = this.__config.iconMenuExpanded;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\titem[this.__fieldIsOpen] = true;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.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\tif(!this.__setting[\"customClass\"])\r\n\t\t{\r\n\t\t\tthis.__setting[\"customClass\"] = {};\r\n\t\t}\r\n\t\tthis.__config = {\r\n\t\t\tcontainerElement: this.__setting[\"containerElement\"] || this.__domVar.doc.body,\r\n\t\t\telementsBeforeMenu: this.__setting[\"elementsBeforeMenu\"] || null,\r\n\t\t\tpageHeaderContainer: this.__setting[\"pageHeaderContainer\"] || null,\r\n\t\t\tpageContentContainer: this.__setting[\"pageContentContainer\"] || null,\r\n\t\t\theader: this.__setting[\"header\"] || null,\r\n\t\t\tshowCollapseIcon: this.util.isUndefinedOrNull(this.__setting[\"showCollapseIcon\"]) ? true : Boolean.parse(this.__setting[\"showCollapseIcon\"]),\r\n\t\t\ticonCollapse: this.__setting[\"iconCollapse\"] || \"<i class='fa fa-bars pull-right'></i>\",\r\n\t\t\tdataSource: this.__setting[\"dataSource\"] || null,\r\n\t\t\ttitleField: this.__setting[\"titleField\"] || \"title\",\r\n\t\t\tchildField: this.__setting[\"childField\"] || \"children\",\r\n\t\t\ticonPosition: this.__setting[\"iconPosition\"] || \"left\",\r\n\t\t\ticonMenuExpanded: this.__setting[\"iconMenuExpanded\"] || ((this.__setting[\"iconPosition\"] === 'right') ? \"<i class='ns-icon ns-navigation-arrow-down'></i>\" : \"<i class='ns-icon ns-navigation-arrow-down'></i>\"),\r\n\t\t\ticonMenuCollapsed: this.__setting[\"iconMenuCollapsed\"] || ((this.__setting[\"iconPosition\"] === 'right') ? \"<i class='ns-icon ns-navigation-arrow-left'></i>\" : \"<i class='ns-icon ns-navigation-arrow-right'></i>\"),\r\n\t\t\tcontext: this.__setting[\"context\"] || this.__domVar.win,\r\n\t\t\tcollapseLeftOffset: parseInt(this.__setting[\"collapseLeftOffset\"]) || 0,\r\n\t\t\tcollapseTopOffset: parseInt(this.__setting[\"collapseTopOffset\"]) || 0,\r\n\t\t\tisPositionAbsolute: this.util.isUndefinedOrNull(this.__setting[\"isPositionAbsolute\"]) ? true : Boolean.parse(this.__setting[\"isPositionAbsolute\"]),\r\n\t\t\textraAttribute: this.__setting[\"extraAttribute\"],// to set link for Angular 2 or other framework attributes\r\n\t\t\tenableAnimation: Boolean.parse(this.__setting[\"enableAnimation\"]),\r\n\t\t\tenableFilter: this.util.isUndefinedOrNull(this.__setting[\"enableFilter\"]) ? true : Boolean.parse(this.__setting[\"enableFilter\"]),\r\n\t\t\tfilterConfig: this.__setting[\"filterConfig\"] || {},\r\n\t\t\tcustomClass:{navContainer:this.__setting.customClass[\"navContainer\"] || null,\r\n\t\t\t\t\t  menuContainer:this.__setting.customClass[\"menuContainer\"] || null,\r\n\t\t\t\t\t  headerMenu:this.__setting.customClass[\"headerMenu\"] || null,\r\n\t\t\t\t\t  menu:this.__setting.customClass[\"menu\"] || null,\r\n\t\t\t\t\t  selectedParentMenu:this.__setting.customClass[\"selectedParentMenu\"] || \"nsNavParentSelectedMenu\",\r\n\t\t\t\t\t  selectedMenu:this.__setting.customClass[\"selectedMenu\"] || \"nsNavSelectedMenu\"}\r\n\t\t};\r\n\t\t//same as nsFloatingLabel properties except interval\r\n\t\tvar filterConfig = this.__config.filterConfig;\r\n\t\tfilterConfig.interval = this.util.isUndefinedOrNull(filterConfig[\"interval\"]) ? 500 : parseInt(filterConfig[\"interval\"]);\r\n\t\tfilterConfig.label = filterConfig[\"label\"] || \"Filter\";\r\n\t\tthis.__createStructure();\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__renderItems = function()\r\n\t{\r\n\t\tif(this.__navigationContainer)\r\n\t\t{\r\n\t\t\tvar arrChildren = this.__navigationContainer.children;\r\n\t\t\tif(arrChildren && arrChildren.length)\r\n\t\t\t{\r\n\t\t\t\tvar length = arrChildren.length;\r\n\t\t\t\tvar child = null;\r\n\t\t\t\tfor(var count = length - 1;count > -1 ;count--)\r\n\t\t\t\t{\r\n\t\t\t\t\tchild = arrChildren[count];\r\n\t\t\t\t\tif(child && this.util.hasStyleClass(child,\"nsNavigationItem\"))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tchild.parentElement.removeChild(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//this.util.removeAllChildren(this.__navigationContainer);\r\n\t\t\t//this.__createHeader(this.__navigationContainer);\r\n\t\t\t//this.__createSearchComponents(this.__navigationContainer);\r\n\t\t\tthis.__createItems(this.__config.dataSource,this.__navigationContainer,1,null);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__createStructure = function()\r\n\t{\r\n\t\tif(!this.__navigationContainerParent)\r\n\t\t{\r\n\t\t\tthis.util.removeAllChildren(this.__navigationContainerParent);\r\n\t\t\tthis.__navigationContainerParent = null;\r\n\t\t\tthis.__navigationContainer = null;\r\n\t\t}\r\n\t\tthis.openNavigation();\r\n\t\tthis.util.addStyleClass(this.__baseComponent,\"nsNavMainContainer\");\r\n\t\tthis.__applyTheme(this.__baseComponent,\"nsNavMainContainer\");\r\n\t\tif(this.__config.isPositionAbsolute)\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(this.__baseComponent,\"nsNavMainContainerAbsolute\");\r\n\t\t}\r\n\t\tthis.util.addEvent(this.__baseComponent,\"mouseleave\",this.__parentMouseEventHandler.bind(this,null,\"mouseleave\"));\r\n\t\t//header start\r\n\t\tthis.__navigationHeaderParent = this.util.createDiv(this.getID() + \"HeaderParent\",\"nsNavHeaderParent\");\r\n\t\tthis.__applyCustomClass(this.__navigationHeaderParent,\"navHeader\");\r\n\t\tthis.__navigationHeader = this.util.createElement(\"ul\",this.getID() + \"Header\",\"nsNavHeader\");\r\n\t\tthis.__applyCustomClass(this.__navigationHeader,\"menuHeader\");\r\n\t\tthis.__addElementsBeforeMenu(this.__navigationHeaderParent);\r\n\t\tthis.__createHeader(this.__navigationHeader);\r\n\t\tthis.__createSearchComponents(this.__navigationHeader);\r\n\t\tthis.__navigationHeaderParent.appendChild(this.__navigationHeader);\r\n\t\t//header end\r\n\t\t//body start\r\n\t\tthis.__navigationContainerParent = this.util.createDiv(this.getID() + \"ContainerParent\",\"nsNavContainerParent\");\r\n\t\tthis.__applyCustomClass(this.__navigationContainerParent,\"navContainer\");\r\n\t\tthis.__navigationContainer = this.util.createElement(\"ul\",this.getID() + \"Container\",\"nsNavContainer nsNavContainerIcon\" + this.util.toCamelCase(this.__config.iconPosition,true));\r\n\t\tthis.__applyCustomClass(this.__navigationContainer,\"menuContainer\");\r\n\t\tthis.__navigationContainerParent.appendChild(this.__navigationContainer);\r\n\t\t//body end\r\n\t\t//Footer start\r\n\t\tthis.__navigationFooterParent = this.util.createDiv(this.getID() + \"FooterParent\",\"nsNavHeaderFooter\");\r\n\t\tthis.__applyCustomClass(this.__navigationFooterParent,\"navFooter\");\r\n\t\t//Footer end\r\n\t\tif(this.__config.pageHeaderContainer && this.__config.pageHeaderContainer.offsetHeight > 0)\r\n\t\t{\r\n\t\t\tthis.__baseComponent.style.marginTop = this.__config.pageHeaderContainer.offsetHeight + \"px\";\r\n\t\t}\r\n\t\tthis.__baseComponent.appendChild(this.__navigationHeaderParent);\r\n\t\tthis.__baseComponent.appendChild(this.__navigationContainerParent);\r\n\t\tthis.__baseComponent.appendChild(this.__navigationFooterParent);\r\n\t\tthis.__headerItemHeight = this.__headerItem ? this.__headerItem.offsetHeight : 0;\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__addElementsBeforeMenu = function(parent)\r\n\t{\r\n\t\tif(parent && this.__config.elementsBeforeMenu && this.__config.elementsBeforeMenu.length > 0)\r\n\t\t{\r\n\t\t\tvar length = this.__config.elementsBeforeMenu.length;\r\n\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar element = this.__config.elementsBeforeMenu[count];\r\n\t\t\t\tif(element)\r\n\t\t\t\t{\r\n\t\t\t\t\tparent.appendChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__createHeader = function(parent)\r\n\t{\r\n\t\tthis.__headerItem = this.util.createElement(\"li\",null,\"nsNavTitle\");\r\n\t\tthis.__applyCustomClass(this.__headerItem,\"headerMenu\");\r\n\t\tif(this.__config.header)\r\n\t\t{\r\n\t\t\tvar span = this.util.createElement(\"span\",null,\"nsNavHeaderTitle\");\r\n\t\t\tthis.util.addStyleClass(span,\"nsNavNonVisibleIcon\");\r\n\t\t\tspan.appendChild(this.__domVar.doc.createTextNode(this.__config.header));\r\n\t\t\tthis.__headerItem.appendChild(span);\r\n\t\t}\r\n\t\tif(this.__config.showCollapseIcon)\r\n\t\t{\r\n\t\t\tvar spanIcon = this.util.createElement(\"span\",null,\"nsNavVisibleIcon\");\r\n\t\t\tspanIcon.innerHTML = this.__config.iconCollapse;\r\n\t\t\tthis.util.addEvent(spanIcon,\"click\",this.__toggleIconClickHandler.bind(this));\r\n\t\t\tthis.__headerItem.appendChild(spanIcon);\r\n\t\t}\r\n\t\tparent.appendChild(this.__headerItem);\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__createSearchComponents = function(parent)\r\n\t{\r\n\t\tif(this.__config.enableFilter)\r\n\t\t{\r\n\t\t\tthis.__conSearch = this.util.createElement(\"li\",this.getID() + \"SearchContainer\",\"nsNavSearchContainer\");\r\n\t\t\tparent.appendChild(this.__conSearch);\r\n\t\t\tvar filterConfig = this.__config.filterConfig;\r\n\t\t\tfilterConfig.container = this.__conSearch;\r\n\t\t\tthis.__nsFloatingLabel = new NSFloatingLabel(filterConfig);\r\n\t\t\tthis.util.addEvent(this.__conSearch,\"input\",this.__txtSearchChangeHandler.bind(this));\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__txtSearchChangeHandler = function(event)\r\n\t{\r\n\t\tclearTimeout(this.__interval);\r\n\t\tvar self = this;\r\n\t\tthis.__interval = setTimeout(function(){\r\n\t\t\t\tself.__filterRecord.call(self,self.__nsFloatingLabel.value());\r\n\t\t\t}, this.__config.filterConfig.interval);\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__createItems = function(arrItem,parent,level,parentMenuItem)\r\n\t{\r\n\t\tif(arrItem)\r\n\t\t{\r\n\t\t\tif(!this.util.isArray(arrItem))\r\n\t\t\t{\r\n\t\t\t\tarrItem = [arrItem];\r\n\t\t\t}\r\n\t\t\tvar item = {};\r\n\t\t\tfor(var count = 0;count < arrItem.length;count++)\r\n\t\t\t{\r\n\t\t\t\titem = arrItem[count];\r\n\t\t\t\tif(item)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar li = this.__createItem(item,level,parentMenuItem);\r\n\t\t\t\t\tparent.appendChild(li);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\t//While Changing this function, see if this change is applicable in __createDynamicItem function\r\n\tNSNavigation.prototype.__createItem = function(item,level,parentMenuItem)\r\n\t{\r\n\t\tvar li = this.util.createElement(\"li\",null,\"nsNavigationItem\");\r\n\t\tthis.__applyCustomClass(li,\"menu\");\r\n\t\tli.setAttribute(\"ns-Nav-Level\",level);\r\n\t\tif(item[\"cssClass\"])\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(li,item[\"cssClass\"]);\r\n\t\t}\r\n\t\tif(level == 1)\r\n\t\t{\r\n\t\t\tthis.util.addEvent(li,\"mouseenter\",this.__parentMouseEventHandler.bind(this,item,\"mouseenter\"));\r\n\t\t\t//this.util.addEvent(li,\"mouseleave\",this.__parentMouseEventHandler.bind(this,item,\"mouseleave\"));\r\n\t\t\t//this.util.addEvent(li,\"click\",this.__parentMouseEventHandler.bind(this,item,\"mouseenter\"));\r\n\t\t}\r\n\t\titem[this.__fieldElement] = li;\r\n\t\titem[this.__fieldIsOpen] = false;\r\n\t\tif(item[\"disabled\"])\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(li,\"nsNavigationItemDisabled\");\r\n\t\t}\r\n\t\tvar anchor = this.util.createElement(\"a\",null);\r\n\t\tli.appendChild(anchor);\r\n\t\tif(item[\"iconBeforeHtml\"])\r\n\t\t{\r\n\t\t\tvar spanIcon = this.util.createElement(\"span\");\r\n\t\t\tthis.util.addStyleClass(spanIcon);\r\n\t\t\tspanIcon.innerHTML = item[\"iconBeforeHtml\"];\r\n\t\t\tvar icon = spanIcon.firstChild;\r\n\t\t\tanchor.appendChild(icon);\r\n\t\t\tanchor.appendChild(this.__domVar.doc.createTextNode(\"\\u00A0\"));\r\n\t\t}\r\n\t\tvar spanText = this.util.createElement(\"span\",null,\"nsNavMenuText\");\r\n\t\tthis.util.addStyleClass(spanText,\"nsNavNonVisibleIcon\");\r\n\t\tspanText.appendChild(this.__domVar.doc.createTextNode(item[this.__config.titleField]));\r\n\t\tanchor.appendChild(spanText);\r\n\t\tif(item[\"iconAfterHtml\"])\r\n\t\t{\r\n\t\t\tvar spanIcon = this.util.createElement(\"span\");\r\n\t\t\tspanIcon.innerHTML = item[\"iconAfterHtml\"];\r\n\t\t\tvar icon = spanIcon.firstChild;\r\n\t\t\tanchor.appendChild(icon);\r\n\t\t}\r\n\t\tvar hasChildren = false;\r\n\t\tif(this.__hasChildren(item))\r\n\t\t{\r\n\t\t\tthis.util.addEvent(anchor,\"click\",this.__parentMenuClickHandler.bind(this,item));\r\n\t\t\tthis.util.addStyleClass(li,\"nsNavItemParent\");\r\n\t\t\tanchor.setAttribute(\"href\",\"javascript:void(0)\");\r\n\t\t\tvar spanIcon = this.util.createElement(\"span\");\r\n\t\t\tthis.util.addStyleClass(spanIcon,\"nsNavNonVisibleIcon\");\r\n\t\t\tspanIcon.innerHTML = this.__config.iconMenuExpanded;\r\n\t\t\tif(this.__config.iconPosition == \"left\")\r\n\t\t\t{\r\n\t\t\t\tanchor.insertBefore(spanIcon,anchor.firstChild);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(spanIcon,\"nsNavContainerPullRight\");\r\n\t\t\t\tanchor.appendChild(spanIcon);\r\n\t\t\t}\r\n\t\t\tvar ul = this.util.createElement(\"ul\",null,\"nsNavSubNavContainer\");\r\n\t\t\tthis.util.addStyleClass(ul,\"nsNavNonVisibleIcon\");\r\n\t\t\tif(this.__config.enableAnimation)\r\n\t\t\t{\r\n\t\t\t\tthis.util.addStyleClass(ul,\"nsNavSubNavAnimate\");\r\n\t\t\t}\r\n\t\t\tli.appendChild(ul);\r\n\t\t\titem[this.__fieldChildMenuIconContainer] = spanIcon;\r\n\t\t\titem[this.__fieldChildContainer] = ul;\r\n\t\t\tthis.__createItems(item[this.__config.childField],ul,level + 1,item);\r\n\t\t\thasChildren = true;\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.__setLink(anchor,item[\"link\"]);\r\n\t\t\tthis.__setExtraAttrubtesForLink(anchor,item);\r\n\t\t}\r\n\t\tthis.util.addEvent(anchor,\"click\",this.__menuClickHandler.bind(this,item,li,hasChildren));\r\n\t\tif(level > 1)\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(li,\"nsNavigationChildItem\");\r\n\t\t}\r\n\t\tif(parentMenuItem)\r\n\t\t{\r\n\t\t\titem[this.__fieldParentMenuItem] = parentMenuItem;\r\n\t\t}\r\n\t\tif(item[\"selected\"] && !item[\"disabled\"])\r\n\t\t{\r\n\t\t\tthis.__selectMenu(item,li,false);\r\n\t\t\tthis.__invokeMenuClickHandler(item,li);\r\n\t\t}\r\n\t\tif(hasChildren && item[\"expanded\"] && !item[\"disabled\"])\r\n\t\t{\r\n\t\t\tthis.__selectMenu(item,li,true);\r\n\t\t}\r\n\t\treturn li;\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__invokeMenuClickHandler = function(item,li)\r\n\t{\r\n\t\tli = li || item[this.__fieldElement];\r\n\t\tif(li)\r\n\t\t{\r\n\t\t\tvar anchor = li.querySelector(\"a\");\r\n\t\t\tif(anchor)\r\n\t\t\t{\r\n\t\t\t\tanchor.click();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__selectMenu = function(item,li,isExpandOnly)\r\n\t{\r\n\t\tif(!li && item && item[this.__fieldElement])\r\n\t\t{\r\n\t\t\tli = item[this.__fieldElement];\r\n\t\t}\r\n\t\tif(item)\r\n\t\t{\r\n\t\t\tvar parentMenuItem = item[this.__fieldParentMenuItem];\r\n\t\t\tif(isExpandOnly)\r\n\t\t\t{\r\n\t\t\t\tparentMenuItem = item;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tif(li)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__handleSelectedMenu(item,li);\r\n\t\t\t\t}\r\n\t\t\t\tparentMenuItem = item[this.__fieldParentMenuItem];\r\n\t\t\t}\r\n\t\t\twhile (parentMenuItem)\r\n\t\t\t{\r\n\t\t\t\tif(parentMenuItem[this.__fieldElement])\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.util.addStyleClass(parentMenuItem[this.__fieldElement],\"nsNavItemOpen\");\r\n\t\t\t\t\tif(parentMenuItem[this.__fieldChildContainer])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.util.addStyleClass(parentMenuItem[this.__fieldChildContainer],\"nsNavSubNavContainerVisible\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\tparentMenuItem[this.__fieldIsOpen] = true;\r\n\t\t\t\t}\r\n\t\t\t\tparentMenuItem = parentMenuItem[this.__fieldParentMenuItem];\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__menuClickHandler = function(item,li,hasChildren,event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\tif(!hasChildren)\r\n\t\t{\r\n\t\t\tthis.__handleSelectedMenu(item,li);\r\n\t\t\tif(item[\"click\"])\r\n\t\t\t{\r\n\t\t\t\tif (typeof item[\"click\"] === \"string\" || item[\"click\"] instanceof String)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(this.util.isFunction(item[\"click\"]))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\titem[\"click\"] = this.__config.context[item[\"click\"]];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(item[\"click\"] && this.util.isFunction(item[\"click\"]))\r\n\t\t\t\t{\r\n\t\t\t\t\titem[\"click\"](event,item,li);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t//dont remove it as it is used in React as the page refreshed on click\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__toggleIconClickHandler = function(event)\r\n\t{\r\n\t\tthis.__destroyDynamicItem();\r\n\t\tthis.toggleNavigation();\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__parentMenuClickHandler = function(item,event)\r\n\t{\r\n\t\tif(item && item[this.__fieldElement])\r\n\t\t{\r\n\t\t\titem[this.__fieldIsOpen] ? this.collapse(item) : this.expand(item);\r\n\t\t\tthis.__selectedParentMenuItem = item;\r\n\t\t}\r\n\t\t\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__parentMouseEventHandler = function(item,eventType,event)\r\n\t{\r\n\t\tevent = this.util.getEvent(event);\r\n\t\t//for some reason event.type is coming as load so passing eventType to listener\r\n\t\tswitch(eventType)\r\n\t\t{\r\n\t\t\tcase \"mouseenter\":\r\n\t\t\t\tif(item && item[this.__fieldElement] && !this.__isNavOpen)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.__createDynamicItem(item);\r\n\t\t\t\t}\r\n\t\t\t\t//this.util.addStyleClass(item[this.__fieldElement],\"nsNavParentHover\");\r\n\t\t\tbreak;\r\n\t\t\tcase \"mouseleave\":\r\n\t\t\t\tthis.__destroyDynamicItem();\r\n\t\t\t\t//this.util.removeStyleClass(item[this.__fieldElement],\"nsNavParentHover\");\r\n\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__filterRecord = function(searchText)\r\n\t{\r\n\t\t if(searchText && searchText.length > 0)\r\n\t\t {\r\n\t\t\t var field = this.__config.titleField;\r\n\t\t\t var filter = {};\r\n\t\t\t filter[field] = searchText;\r\n\t\t\t var setting = {};\r\n\t\t\t setting[field] = {caseSensitive:false,multiline:false,matchType:new NSFilter().CONTAINS};\r\n\t\t\t this.__handleFiltering(filter,setting);\r\n\t\t }\r\n\t\t else\r\n\t\t {\r\n\t\t\t this.__resetFiltering();\r\n\t\t }\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__resizeContentContainer = function()\r\n\t{\r\n\t\tif(this.__config.pageContentContainer)\r\n\t\t{\r\n\t\t\tthis.__config.pageContentContainer.style.marginLeft = this.__baseComponent.offsetWidth + \"px\";\t\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__getTopOffset = function()\r\n\t{\r\n\t\tvar offset = 0;\r\n\t\tif(this.__config.elementsBeforeMenu && this.__config.elementsBeforeMenu.length > 0)\r\n\t\t{\r\n\t\t\tvar length = this.__config.elementsBeforeMenu.length;\r\n\t\t\tfor(var count = 0;count < length;count++)\r\n\t\t\t{\r\n\t\t\t\tvar element = this.__config.elementsBeforeMenu[count];\r\n\t\t\t\tif(element)\r\n\t\t\t\t{\r\n\t\t\t\t\toffset += element.offsetHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif(!this.__isNavOpen)\r\n\t\t{\r\n\t\t\toffset += this.__headerItemHeight;\r\n\t\t}\r\n\t\treturn offset;\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__handleFiltering = function(filter,setting,recordLimit)\r\n\t{\r\n\t\tvar eventParam = {filter:filter,setting:setting,recordLimit:recordLimit};\r\n\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.FILTER_CHANGING,eventParam,eventParam);\r\n\t\tthis.__filteredColumn = [];\r\n\t\tif(filter)\r\n\t    {\r\n\t\t\t var isHierarchical = this.__isDataHierarchical;\r\n\t\t\t this.__config.dataSource = this.__config.orignalDataSource.slice(0);\r\n\t\t\t var source = this.__config.dataSource;\r\n\t\t   \t var nsFilter = new NSFilter(source,filter,setting,recordLimit,isHierarchical,this.__config.childField,null,null,[\"__ns_nav_field_parentmenuitem\"]);//this.__nsGrid.__filterFunction,this.__nsGrid.__hierarchyFilterChildrenFunction\r\n\t\t   \t this.__config.dataSource = nsFilter.execute();\r\n\t\t   \t this.__renderItems();\r\n\t\t   \t this.util.dispatchEvent(this.__baseComponent,NSNavigation.FILTER_CHANGED,eventParam,eventParam);\r\n\t    }\r\n\t};\r\n\r\n\tNSNavigation.prototype.__resetFiltering = function()\r\n\t{\r\n\t\tif(this.__config.orignalDataSource)\r\n\t\t{\r\n\t\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.FILTER_CHANGING,null,null);\r\n\t\t\tthis.__config.dataSource = this.__config.orignalDataSource.slice(0);\r\n\t\t\tthis.__renderItems();\r\n\t\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.FILTER_CHANGED,null,null);\r\n\t\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.FILTER_RESETTED,null,null);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__createDynamicItem = function(item)\r\n\t{\r\n\t\tthis.__destroyDynamicItem();\r\n\t\tvar self = this;\r\n\t\tvar createChild = function(item,parent,level)\r\n\t\t{\r\n\t\t\tvar li = self.util.createElement(\"li\",null,\"nsNavDynamicMenuItem\");\r\n\t\t\tif(item[\"cssClass\"])\r\n\t\t\t{\r\n\t\t\t\tself.util.addStyleClass(li,item[\"cssClass\"]);\r\n\t\t\t}\r\n\t\t\tvar anchor = self.util.createElement(\"a\",null);\r\n\t\t\tli.appendChild(anchor);\r\n\t\t\tif(item[\"iconBeforeHtml\"])\r\n\t\t\t{\r\n\t\t\t\tvar spanIcon = self.util.createElement(\"span\");\r\n\t\t\t\tself.util.addStyleClass(spanIcon);\r\n\t\t\t\tspanIcon.innerHTML = item[\"iconBeforeHtml\"];\r\n\t\t\t\tvar icon = spanIcon.firstChild;\r\n\t\t\t\tanchor.appendChild(icon);\r\n\t\t\t\tanchor.appendChild(self.__domVar.doc.createTextNode(\"\\u00A0\"));\r\n\t\t\t}\r\n\t\t\tvar spanText = self.util.createElement(\"span\",null,\"nsNavDynamicMenuText\");\r\n\t\t\tspanText.appendChild(self.__domVar.doc.createTextNode(item[self.__config.titleField]));\r\n\t\t\tanchor.appendChild(spanText);\r\n\t\t\tif(item[\"iconAfterHtml\"])\r\n\t\t\t{\r\n\t\t\t\tvar spanIcon = self.util.createElement(\"span\");\r\n\t\t\t\tspanIcon.innerHTML = item[\"iconAfterHtml\"];\r\n\t\t\t\tvar icon = spanIcon.firstChild;\r\n\t\t\t\tanchor.appendChild(icon);\r\n\t\t\t}\r\n\t\t\tvar hasChildren = false;\r\n\t\t\tif(self.__hasChildren(item))\r\n\t\t\t//if(item[self.__config.childField] && item[self.__config.childField].length > 0)\r\n\t\t\t{\r\n\t\t\t\tanchor.setAttribute(\"href\",\"javascript:void(0)\");\r\n\t\t\t\tvar spanIcon = self.util.createElement(\"span\");\r\n\t\t\t\tself.util.addStyleClass(spanIcon,\"nsNavNonVisibleIcon\");\r\n\t\t\t\tspanIcon.innerHTML = self.__config.iconMenuExpanded;\r\n\t\t\t\tif(self.__config.iconPosition == \"left\")\r\n\t\t\t\t{\r\n\t\t\t\t\tanchor.insertBefore(spanIcon,anchor.firstChild);\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.addStyleClass(spanIcon,\"nsNavContainerPullRight\");\r\n\t\t\t\t\tanchor.appendChild(spanIcon);\r\n\t\t\t\t}\r\n\t\t\t\tcreateChildren(item[self.__config.childField],li,level + 1);\r\n\t\t\t\thasChildren = true;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tself.__setLink(anchor,item[\"link\"]);\r\n\t\t\t\tself.__setExtraAttrubtesForLink(anchor,item);\r\n\t\t\t}\r\n\t\t\tself.util.addEvent(anchor,\"click\",self.__menuClickHandler.bind(self,item,li,hasChildren));\r\n\t\t\tif(item[\"disabled\"])\r\n\t\t\t{\r\n\t\t\t\tself.util.addStyleClass(li,\"nsNavigationItemDisabled\");\r\n\t\t\t}\r\n\t\t\tif(parent)\r\n\t\t\t{\r\n\t\t\t\tparent.appendChild(li);\r\n\t\t\t}\r\n\t\t\treturn {li:li,anchor:anchor,hasChildren:hasChildren};\r\n\t\t};\r\n\t\tvar createChildren = function(arrItems,parent,level)\r\n\t\t{\r\n\t\t\tvar ul = self.util.createElement(\"ul\",null,\"nsNavDynamicSubMenuCont\");\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\tcreateChild(item,ul,level);\r\n\t\t\t}\r\n\t\t\tparent.appendChild(ul);\r\n\t\t};\r\n\t\t\r\n\t\tthis.__dynamicContainer = this.util.createDiv(this.getID() + \"DynamicContainer\",\"nsNavDynamicContainer\");\r\n\t\tvar spanText = this.util.createElement(\"span\",null,\"nsNavDynamicMenuText\");\r\n\t\tthis.__dynamicContainer.appendChild(spanText);\r\n\t\tif(this.__hasChildren(item))\r\n\t\t{\r\n\t\t\tspanText.appendChild(this.__domVar.doc.createTextNode(item[this.__config.titleField]));\r\n\t\t\tcreateChildren(item[this.__config.childField],this.__dynamicContainer,1);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(spanText,\"nsNavDynamicSubMenuCont\");\r\n\t\t\tcreateChild(item,spanText,1);\r\n\t\t}\r\n\t\tthis.__baseComponent.appendChild(this.__dynamicContainer);\r\n\t\tvar topOffset = this.__getTopOffset();\r\n\t\tvar rect = item[this.__fieldElement].getBoundingClientRect();\r\n\t\tthis.__dynamicContainer.style.top = (rect.top + this.__config.collapseTopOffset - topOffset) + \"px\"; \r\n\t\tthis.__dynamicContainer.style.left = (rect.left + this.__navigationContainer.offsetWidth + this.__config.collapseLeftOffset) + \"px\";\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__destroyDynamicItem = function()\r\n\t{\r\n\t\tif(this.__dynamicContainer && this.__dynamicContainer.parentNode)\r\n\t\t{\r\n\t\t\tthis.__dynamicContainer.parentNode.removeChild(this.__dynamicContainer);\r\n\t\t\tthis.__dynamicContainer = null;\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__handleSelectedMenu = function(item,li)\r\n\t{\r\n\t\tvar self = this;\r\n\t\tvar selectDeselectParent = function(menuItem,isSelect)\r\n\t\t{\r\n\t\t\tif(menuItem)\r\n\t\t\t{\r\n\t\t\t\tvar parentMenuItem = menuItem[self.__fieldParentMenuItem];\r\n\t\t\t\tvar func = isSelect ? self.util.addStyleClass : self.util.removeStyleClass;\r\n\t\t\t\twhile (parentMenuItem)\r\n\t\t\t\t{\r\n\t\t\t\t\tif(parentMenuItem[self.__fieldElement])\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfunc.bind(self.util)(parentMenuItem[self.__fieldElement],self.__config.customClass.selectedParentMenu);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tparentMenuItem = parentMenuItem[self.__fieldParentMenuItem];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tif(!li && item && item[this.__fieldElement])\r\n\t\t{\r\n\t\t\tli = item[this.__fieldElement];\r\n\t\t}\r\n\t\tif(this.__selectedMenu)\r\n\t\t{\r\n\t\t\tthis.util.removeStyleClass(this.__selectedMenu,this.__config.customClass.selectedMenu);\r\n\t\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.NAVIGATION_MENU_DESELECTED,this.__selectedMenuItem,{item:this.__selectedMenuItem,menu:this.__selectedMenu});\r\n\t\t\tselectDeselectParent(this.__selectedMenuItem,false);\r\n\t\t\tthis.__selectedMenu = null;\r\n\t\t\tthis.__selectedMenuItem = null;\r\n\t\t}\r\n\t\tthis.util.addStyleClass(li,this.__config.customClass.selectedMenu);\r\n\t\tselectDeselectParent(item,true);\r\n\t\tthis.__selectedMenu = li;\r\n\t\tthis.__selectedMenuItem = item;\r\n\t\tthis.util.dispatchEvent(this.__baseComponent,NSNavigation.NAVIGATION_MENU_SELECTED,item,{item:item,menu:li});\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__resetVariables = function()\r\n\t{\r\n\t\tthis.__selectedParentMenuItem = null;\r\n\t\tthis.__selectedMenu = null;\r\n\t\tthis.__selectedMenuItem = null;\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__applyCustomClass = function(element,type)\r\n\t{\r\n\t\tif(element && type && this.__config.customClass[type])\r\n\t\t{\r\n\t\t\tthis.util.addStyleClass(element,this.__config.customClass[type]);\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__getItemByElement = function(li,source)\r\n\t{\r\n\t\tvar arrSource = [];\r\n\t\tif(source)\r\n\t\t{\r\n\t\t\tif(this.util.isArray(source))\r\n\t\t\t{\r\n\t\t\t\tarrSource = source;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tarrSource = [source];\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tarrSource = this.__config.dataSource;\r\n\t\t}\r\n\t\tif(li && arrSource && arrSource.length > 0)\r\n\t\t{\r\n\t\t\tvar item = null;\r\n\t\t\tfor(var count = 0;count < arrSource.length;count++)\r\n\t\t\t{\r\n\t\t\t\titem = arrSource[count];\r\n\t\t\t\tif(item[this.__fieldElement] == li)\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(this.__hasChildren(item))\r\n\t\t\t\t{\r\n\t\t\t\t\tvar retItem = this.__getItemByElement(li,item[this.__config.childField]);\r\n\t\t\t\t\tif(retItem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn retItem;\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\tNSNavigation.prototype.__getItemByField = function(field,value,source)\r\n\t{\r\n\t\tvar arrSource = [];\r\n\t\tif(source)\r\n\t\t{\r\n\t\t\tif(this.util.isArray(source))\r\n\t\t\t{\r\n\t\t\t\tarrSource = source;\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tarrSource = [source];\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tarrSource = this.__config.dataSource;\r\n\t\t}\r\n\t\tif(arrSource && arrSource.length > 0)\r\n\t\t{\r\n\t\t\tvar item = null;\r\n\t\t\tfor(var count = 0;count < arrSource.length;count++)\r\n\t\t\t{\r\n\t\t\t\titem = arrSource[count];\r\n\t\t\t\tif(item[field] == value)\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(this.__hasChildren(item))\r\n\t\t\t\t{\r\n\t\t\t\t\tvar retItem = this.__getItemByField(field,value,item[this.__config.childField]);\r\n\t\t\t\t\tif(retItem)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\treturn retItem;\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\tNSNavigation.prototype.__hasChildren = function(item)\r\n\t{\r\n\t\treturn (item[this.__config.childField] && item[this.__config.childField].length > 0);\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__setLink = function(anchor,link)\r\n\t{\r\n\t\tif(link)\r\n\t\t{\r\n\t\t\tanchor.setAttribute(\"href\",link);\r\n\t\t\tif(this.__config[\"extraAttribute\"])\r\n\t\t\t{\r\n\t\t\t\tanchor.setAttribute(this.__config[\"extraAttribute\"],link);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse \r\n\t\t{\r\n\t\t\tanchor.setAttribute(\"href\",\"javascript:void(0)\");\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.prototype.__setExtraAttrubtesForLink = function(anchor,item) {\r\n\t\tif(item.attributes) {\r\n\t\t\tfor (var prop in item.attributes) {\r\n\t\t\t    if (item.attributes.hasOwnProperty(prop)) {\r\n\t\t\t        anchor.setAttribute(prop,item.attributes[prop]);\r\n\t\t\t    }\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t\r\n\tNSNavigation.NAVIGATION_OPEN_START = \"navigationOpenStart\";\r\n\tNSNavigation.NAVIGATION_OPEN_END = \"navigationOpenEnd\";\r\n\tNSNavigation.NAVIGATION_CLOSE_START = \"navigationCloseStart\";\r\n\tNSNavigation.NAVIGATION_CLOSE_END = \"navigationCloseEnd\";\r\n\tNSNavigation.NAVIGATION_MENU_SELECTED = \"navigationMenuSelected\";\r\n\tNSNavigation.NAVIGATION_MENU_DESELECTED = \"navigationMenuDeselected\";\r\n\tNSNavigation.FILTER_CHANGING = \"filterChanging\";\r\n\tNSNavigation.FILTER_CHANGED = \"filterChanged\";\r\n\tNSNavigation.FILTER_RESETTED = \"filterResetted\";\r\n\t\r\n\treturn NSNavigation;\r\n})();\r\nnsModuleExport(this,\"NSNavigation\",NSNavigation);";
