fit-ui 3.2.13 → 3.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ (function(factory){if(typeof module==="object"&&typeof module.exports==="object"){var fit=factory();module.exports=fit;Object.defineProperty(module.exports,"__esModule",{value:true})}else if(typeof define==="function"&&define.amd){define(["require","exports"],factory)}else if(window){var src=document.scripts[document.scripts.length-1].src;var paramSeparatorPos=src.indexOf("?");if(paramSeparatorPos>-1){var name=src.substring(paramSeparatorPos+1,src.indexOf("&")===-1?src.length:src.indexOf("&"));if(name.indexOf("=")===-1){window[name]=factory()}else{window.Fit=factory()}}else{window.Fit=factory()}}})(function(){var fitInstance=function(){(function(){if(!window.JSON||!window.NodeList){if(navigator.userAgent.indexOf("MSIE")>-1)throw new Error("Browser not supported - Internet Explorer 8 or newer is required - make sure Compatibility View is not enabled");else throw new Error("Browser not supported")}return true})();(function(){if(!window.console)window.console={};var shims=["log","debug","info","error","warn","trace"];for(var i=0;i<shims.length;i++){if(!console[shims[i]])console[shims[i]]=function(){}}})();var Fit={};Fit.Core={};Fit.Core.Extend=function(subInstance,superType){Fit.Validation.ExpectIsSet(subInstance);Fit.Validation.ExpectFunction(superType);var binder={Apply:function(){superType.apply(subInstance,arguments);if(!subInstance._internal)subInstance._internal={};if(!subInstance._internal.Extends)subInstance._internal.Extends=[];Fit.Array.Add(subInstance._internal.Extends,superType)}};return binder};Fit.Core.Extends=function(instance,superType){Fit.Validation.ExpectIsSet(instance);Fit.Validation.ExpectFunction(superType);return instance._internal!==undefined&&instance._internal.Extends!==undefined&&Fit.Array.Contains(instance._internal.Extends,superType)===true};Fit.Core.InstanceOf=function(instance,type){return instance instanceof type||Fit.Core.Extends(instance,type)===true};Fit.Core.CreateOverride=function(originalFunction,newFunction){Fit.Validation.ExpectFunction(originalFunction);Fit.Validation.ExpectFunction(newFunction);return function(){var orgBase=window.base;window.base=originalFunction;var error=null;var result=undefined;try{var args=[];for(var i=0;i<arguments.length;i++)args[i]=arguments[i];if(args.length>0)result=newFunction.apply(this,args);else result=newFunction.apply(this)}catch(err){error=err}if(orgBase){window.base=orgBase}else{try{delete window.base}catch(err){window.base=undefined}}if(error!==null)Fit.Validation.ThrowError(error);if(result!==undefined)return result}};Fit.Core.CreateDebouncer=function(func,timeoutMilliseconds,thisArg){var timeout=-1;var lastArgs=[];var d={Cancel:function(){if(timeout!==-1){clearTimeout(timeout);lastArgs=[];timeout=-1}},Invoke:function(){if(timeout!==-1){clearTimeout(timeout)}lastArgs=arguments;timeout=setTimeout(function(){var args=lastArgs;lastArgs=[];timeout=-1;func.apply(thisArg||this,args)},timeoutMilliseconds)},Flush:function(){if(timeout!==-1){var args=lastArgs;d.Cancel();func.apply(thisArg||this,args)}}};return d};Fit.Core.IsEqual=function(jsObj1,jsObj2){if(typeof jsObj1!==typeof jsObj2)return false;if(jsObj1===undefined&&jsObj2===undefined||jsObj1===null&&jsObj2===null){return true}else if(typeof jsObj1==="string"||typeof jsObj1==="boolean"){return jsObj1===jsObj2}else if(typeof jsObj1==="number"){if(isNaN(jsObj1)===true&&isNaN(jsObj2)===true)return true;else return jsObj1===jsObj2}else if(jsObj1 instanceof Date&&jsObj2 instanceof Date){return jsObj1.getTime()===jsObj2.getTime()}else if(jsObj1 instanceof Array&&jsObj2 instanceof Array){if(jsObj1.length!==jsObj2.length)return false;for(var i=0;i<jsObj1.length;i++){if(Fit.Core.IsEqual(jsObj1[i],jsObj2[i])===false)return false}return true}else if(typeof jsObj1==="object"&&typeof jsObj2==="object"&&jsObj1!==null&&jsObj2!==null){var identical=true;var keys=Fit.Array.Merge(Fit.Array.GetKeys(jsObj1),Fit.Array.GetKeys(jsObj2));Fit.Array.ForEach(keys,function(k){if(Fit.Core.IsEqual(jsObj1[k],jsObj2[k])===false){identical=false;return false}});return identical}else if(typeof jsObj1==="function"&&typeof jsObj2==="function"){return jsObj1===jsObj2}return false};Fit.Core.MergeOverwriteBehaviour={Always:"Always",SkipNullAndUndefined:"SkipNullAndUndefined",Never:"Never"};Fit.Core.Merge=function(targetObject,mergeObject,mergeObjectOverwriteBehaviour){Fit.Validation.ExpectObject(targetObject);Fit.Validation.ExpectObject(mergeObject);Fit.Validation.ExpectStringValue(mergeObjectOverwriteBehaviour,true);var isObject=function(val){return val!==undefined&&val!==null&&typeof val==="object"&&val instanceof Date===false&&val instanceof Array===false};var newObject=Fit.Core.Clone(targetObject);Fit.Array.ForEach(mergeObject,function(prop){if(isObject(newObject[prop])&&isObject(mergeObject[prop])){newObject[prop]=Fit.Core.Merge(newObject[prop],mergeObject[prop],mergeObjectOverwriteBehaviour)}else{if(mergeObjectOverwriteBehaviour===Fit.Core.MergeOverwriteBehaviour.SkipNullAndUndefined&&(mergeObject[prop]===null||mergeObject[prop]===undefined)){return}else if(mergeObjectOverwriteBehaviour===Fit.Core.MergeOverwriteBehaviour.Never&&prop in newObject){return}newObject[prop]=mergeObject[prop]}});return newObject};Fit.Core.Clone=function(obj){var serialized=JSON.stringify(obj);var clone=serialized!==undefined?JSON.parse(serialized):serialized;var fixClone=null;fixClone=function(org,clo){if(org instanceof Date){return new Date(org.getTime())}else if(typeof org==="function"){return org}else if(typeof org==="number"&&isNaN(org)===true){return parseInt("")}else if(typeof org==="number"&&org===Infinity){return Infinity}else if(org instanceof RegExp){var flags="";if(org.ignoreCase)flags+="i";if(org.global)flags+="g";if(org.multiline)flags+="m";if(org.sticky)flags+="y";return new RegExp(org.source,flags)}else if(org&&typeof org==="object"){for(var p in org)clo[p]=fixClone(org[p],clo[p])}return clo};clone=fixClone(obj,clone);return clone};Fit._internal={Core:{VersionInfo:{Major:3,Minor:2,Patch:14}}};Fit._internal.Core.EnsureStyles=function(){if(Fit._internal.Core.StylesEnsured===true)return;Fit._internal.Core.StylesEnsured=true;Fit.Events.OnDomReady(function(){var elm=Fit.Dom.CreateElement("<div class='FitUiStyleCheck'></div>");Fit.Dom.Add(document.body,elm);if(Fit.Dom.GetComputedStyle(elm,"width")!=="20px"){Fit.Browser.Log("Lazy loading Fit.UI stylesheet. It is recommended to add a stylesheet reference to Fit.UI.min.css to prevent temporarily unstyled content.");Fit.Loader.LoadStyleSheet(Fit.GetUrl()+"/Fit.UI.min.css?cacheKey="+Fit.GetVersion().Version)}Fit.Dom.Remove(elm)})};(function(){var script=document.querySelector("script#FitUI")||document.querySelector("script#fitui")||document.scripts[document.scripts.length-1];var src=script&&script.src||null;if(!src){src=location.href}Fit._internal.BaseUrl=src.substring(0,src.lastIndexOf("/"));var path=Fit._internal.BaseUrl.replace("http://","").replace("https://","");Fit._internal.BasePath=path.indexOf("/")!==-1?path.substring(path.indexOf("/")):"/"})();Fit.GetVersion=function(){var info=Fit.Core.Clone(Fit._internal.Core.VersionInfo);info.Version=info.Major+"."+info.Minor+"."+info.Patch;return info};Fit.GetUrl=function(){if(Fit._internal.BaseUrlOverride!==undefined)return Fit._internal.BaseUrlOverride;return Fit._internal.BaseUrl};Fit.GetPath=function(){if(Fit._internal.BasePathOverride!==undefined)return Fit._internal.BasePathOverride;return Fit._internal.BasePath};Fit.SetPath=function(basePath){Fit.Validation.ExpectStringValue(basePath===null?"-":basePath);if(basePath===null){delete Fit._internal.BasePathOverride;delete Fit._internal.BaseUrlOverride;return}if(basePath!=="/"&&basePath.lastIndexOf("/")===basePath.length-1){basePath=basePath.substring(0,basePath.length-1)}var rootUrl=location.protocol+"//"+location.host;Fit._internal.BasePathOverride=basePath;if(basePath==="/"){Fit._internal.BaseUrlOverride=rootUrl}else if(basePath.indexOf("/")===0){Fit._internal.BaseUrlOverride=rootUrl+basePath}else{var curPath=location.pathname.substring(0,location.pathname.lastIndexOf("/"));Fit._internal.BaseUrlOverride=rootUrl+curPath+"/"+basePath}};Fit.SetUrl=function(baseUrl){Fit.Validation.ExpectStringValue(baseUrl===null?"-":baseUrl);if(baseUrl===null){Fit.SetPath(null);return}var url=Fit.Browser.ParseUrl(baseUrl);Fit.SetPath(url.FullPath);var newUrl=url.Url.lastIndexOf("/")===url.Url.length-1?url.Url.substring(0,url.Url.length-1):url.Url;Fit._internal.BaseUrlOverride=newUrl};Fit.Validation={};Fit._internal.Validation={};Fit._internal.Validation.DebugMode=true;Fit._internal.Validation.Clone=null;(function(){if(!window.MSEventObj)window.MSEventObj=function(){};if(!window.StaticNodeList)window.StaticNodeList=function(){};if(!window.FileList)window.FileList=function(){};if(!window.File)window.File=function(){};if(!window.NamedNodeMap)window.NamedNodeMap=function(){}})();Fit.Validation.ExpectObject=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(!val||val.constructor!==Object)Fit.Validation.ThrowError("Value '"+val+"' is not a valid object")};Fit.Validation.ExpectNumber=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(typeof val!=="number"||isNaN(val)===true)Fit.Validation.ThrowError("Value '"+val+"' is not a valid number")};Fit.Validation.ExpectInteger=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(typeof val!=="number"||val%1!==0)Fit.Validation.ThrowError("Value '"+val+"' is not a valid integer")};Fit.Validation.ExpectString=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(typeof val!=="string")Fit.Validation.ThrowError("Value '"+val+"' is not a valid string")};Fit.Validation.ExpectStringValue=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;Fit.Validation.ExpectString(val);if(val==="")Fit.Validation.ThrowError("String cannot be empty")};Fit.Validation.ExpectBoolean=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(typeof val!=="boolean")Fit.Validation.ThrowError("Value '"+val+"' is not a valid boolean")};Fit.Validation.ExpectDate=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof Date===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of Date")};Fit.Validation.ExpectArray=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof Array===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of Array")};Fit.Validation.ExpectTypeArray=function(val,typeValCallback,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof Array===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of Array");Fit.Validation.ExpectFunction(typeValCallback);Fit.Array.ForEach(val,function(v){typeValCallback(v)})};Fit.Validation.ExpectInstanceArray=function(val,instanceType,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof Array===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of Array");Fit.Array.ForEach(val,function(v){Fit.Validation.ExpectInstance(v,instanceType)})};Fit.Validation.ExpectDictionary=function(val,typeValCallback,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;Fit.Validation.ExpectObject(val);Fit.Validation.ExpectFunction(typeValCallback);Fit.Array.ForEach(val,function(key){Fit.Validation.ExpectStringValue(key);typeValCallback(val[key])})};Fit.Validation.ExpectCollection=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(Fit._internal.Validation.IsCollectionType(val)===false)Fit.Validation.ThrowError("Value '"+val+"' is not a valid collection")};Fit.Validation.ExpectRegExp=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof RegExp===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of RegExp")};Fit.Validation.ExpectElement=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(window.HTMLElement&&val instanceof HTMLElement===false||val instanceof Element===false||val.style instanceof CSSStyleDeclaration===false)Fit.Validation.ThrowError("Value '"+val+"' is not an HTMLElement")};Fit.Validation.ExpectDomElement=Fit.Validation.ExpectElement;Fit.Validation.ExpectElementNode=Fit.Validation.ExpectElement;Fit.Validation.ExpectNode=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(!val.cloneNode||!val.nodeName||!val.nodeType||val.nodeType!==1&&val.nodeType!==3&&val.nodeType!==8)Fit.Validation.ThrowError("Value '"+val+"' is not a Node (Element, Text, or Comment)")};Fit.Validation.ExpectTextNode=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(!val.cloneNode||!val.nodeName||val.nodeType!==3)Fit.Validation.ThrowError("Value '"+val+"' is not a Text node")};Fit.Validation.ExpectWindow=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof Window===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of Window")};Fit.Validation.ExpectFunction=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(typeof val!=="function")Fit.Validation.ThrowError("Value '"+val+"' is not a valid function")};Fit.Validation.ExpectEventTarget=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(typeof EventTarget!=="undefined"&&val instanceof EventTarget===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of EventTarget");else if(!val.removeEventListener&&!val.attachEvent)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of EventTarget")};Fit.Validation.ExpectEvent=function(val,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof Event===false&&val instanceof MSEventObj===false)Fit.Validation.ThrowError("Value '"+val+"' is not an instance of Event")};Fit.Validation.ExpectInstance=function(val,instanceType,allowNotSet){if(allowNotSet===true&&(val===undefined||val===null))return;if(val instanceof instanceType===true||Fit.Core.Extends(val,instanceType)===true)return;Fit.Validation.ThrowError("Unsupported object type passed")};Fit.Validation.ExpectIsSet=function(val){if(Fit.Validation.IsSet(val)===false)Fit.Validation.ThrowError("Value not set")};Fit.Validation.IsSet=function(obj){return obj!==null&&obj!==undefined};Fit.Validation.ThrowError=function(msg){if(Fit._internal.Validation.DebugMode===true){if(window.console&&console.log)console.log("ThrowError: "+msg);if(window.console&&console.trace)console.trace()}throw new Error(msg)};Fit.Validation.GetStackTrace=function(){if(window.Error===undefined||Error.captureStackTrace===undefined)return"";var obj={};Error.captureStackTrace(obj,Fit.Validation.GetStackTrace);return obj.stack};Fit.Validation.Enabled=function(val){if(Fit.Validation.IsSet(val)===true){if(val===true){Fit._internal.Validation.DebugMode=true;if(Fit._internal.Validation.Clone!==null)Fit.Validation=Fit.Core.Clone(Fit._internal.Validation.Clone)}else{Fit._internal.Validation.DebugMode=false;if(Fit._internal.Validation.Clone===null)Fit._internal.Validation.Clone=Fit.Core.Clone(Fit.Validation);for(var f in Fit.Validation)if(f.indexOf("Expect")===0)Fit.Validation[f]=function(){}}}return Fit._internal.Validation.DebugMode===true};Fit._internal.Validation.IsCollectionType=function(val){if(val===null||val===undefined)return false;else if(val instanceof Array)return true;else if(val instanceof NodeList)return true;else if(val instanceof StaticNodeList)return true;else if(val instanceof HTMLCollection)return true;else if(val instanceof NamedNodeMap)return true;else if(val instanceof FileList)return true;else if(val instanceof StyleSheetList)return true;else if(val instanceof CSSRuleList)return true;else if(val.callee&&val.length!==null&&val.length!==undefined)return true;return false};Fit.Array={};Fit.Array.ForEach=function(obj,callback){Fit.Validation.ExpectFunction(callback);if(Fit._internal.Validation.IsCollectionType(obj)===true){var count=obj.length;var res=false;for(var i=0;i<obj.length;i++){res=callback(obj[i]);if(obj.length!==count)Fit.Validation.ThrowError("Collection was modified while iterating objects");if(res===false)return false}}else if(typeof obj==="object"){for(var i in obj)if(callback(i)===false)return false}return true};Fit.Array.Count=function(obj){if(Fit._internal.Validation.IsCollectionType(obj)===true){return obj.length}else if(typeof obj==="object"){var count=0;for(var i in obj)count++;return count}Fit.Validation.ThrowError("Unsupported collection type passed - unable to determine number of contained elements")};Fit.Array.HasItems=function(obj){if(Fit._internal.Validation.IsCollectionType(obj)===true){return obj.length>0}else if(typeof obj==="object"){for(var i in obj){return true}return false}Fit.Validation.ThrowError("Unsupported collection type passed - unable to determine number of contained elements")};Fit.Array.Recurse=function(arr,childrenProperty,callback){Fit.Validation.ExpectCollection(arr,true);Fit.Validation.ExpectStringValue(childrenProperty);Fit.Validation.ExpectFunction(callback);if(Fit.Validation.IsSet(arr)===false)return true;var count=arr.length;for(var i=0;i<arr.length;i++){if(arr.length!==count)Fit.Validation.ThrowError("Collection was modified while iterating objects");if(callback(arr[i])===false)return false;if(Fit.Validation.IsSet(arr[i][childrenProperty])===false)continue;if(arr[i][childrenProperty]instanceof Function){if(Fit.Array.Recurse(arr[i][childrenProperty](),childrenProperty,callback)===false)return false}else{if(Fit.Array.Recurse(arr[i][childrenProperty],childrenProperty,callback)===false)return false}}return true};Fit.Array.CustomRecurse=function(arr,callback){Fit.Validation.ExpectFunction(callback);if(arr!==undefined&&arr!==null&&Fit._internal.Validation.IsCollectionType(arr)===false)Fit.Validation.ThrowError("Unexpected collection type passed");Fit.Array.ForEach(arr,function(o){Fit.Array.CustomRecurse(callback(o),callback)})};Fit.Array.Add=function(arr,obj){Fit.Validation.ExpectArray(arr);arr.push(obj)};Fit.Array.Insert=function(arr,idx,obj){Fit.Validation.ExpectArray(arr);Fit.Validation.ExpectInteger(idx);arr.splice(idx,0,obj)};Fit.Array.Move=function(arr,fromIdx,toIdx){Fit.Validation.ExpectArray(arr);Fit.Validation.ExpectInteger(fromIdx);Fit.Validation.ExpectInteger(toIdx);if(fromIdx<arr.length){var obj=arr[fromIdx];Fit.Array.RemoveAt(arr,fromIdx);Fit.Array.Insert(arr,toIdx>0?toIdx:0,obj)}};Fit.Array.Merge=function(arr1,arr2){Fit.Validation.ExpectArray(arr1);Fit.Validation.ExpectArray(arr2);return arr1.concat(arr2)};Fit.Array.Remove=function(arr,obj){Fit.Validation.ExpectArray(arr);var idx=Fit.Array.GetIndex(arr,obj);if(idx!==-1)arr.splice(idx,1)};Fit.Array.RemoveAt=function(arr,idx){Fit.Validation.ExpectArray(arr);Fit.Validation.ExpectInteger(idx);arr.splice(idx,1)};Fit.Array.Clear=function(arr){Fit.Validation.ExpectArray(arr);arr.length=0};Fit.Array.GetIndex=function(arr,obj){Fit.Validation.ExpectCollection(arr);for(var i=0;i<arr.length;i++)if(arr[i]===obj)return i;return-1};Fit.Array.GetKeys=function(obj){var keys=[];if(Fit._internal.Validation.IsCollectionType(obj)===true){for(var i=0;i<obj.length;i++){keys.push(i)}}else if(typeof obj==="object"){for(var i in obj){keys.push(i)}}return keys};Fit.Array.Contains=function(arr,obj){Fit.Validation.ExpectCollection(arr);return Fit.Array.GetIndex(arr,obj)>-1};Fit.Array.Copy=function(arr){return Fit.Array.ToArray(arr)};Fit.Array.ToArray=function(coll){Fit.Validation.ExpectCollection(coll);var arr=[];for(var i=0;i<coll.length;i++)arr.push(coll[i]);return arr};Fit.Array.Join=function(arr,separator,callback){Fit.Validation.ExpectCollection(arr);Fit.Validation.ExpectString(separator);Fit.Validation.ExpectFunction(callback);var result="";Fit.Array.ForEach(arr,function(obj){result+=(result!==""?separator:"")+callback(obj)});return result};Fit.Browser={};Fit._internal.Browser={};Fit._internal.Browser.UserAgent=navigator.userAgent;Fit.Browser.GetBrowser=function(returnAppId){Fit.Validation.ExpectBoolean(returnAppId,true);var agent=Fit._internal.Browser.UserAgent;if(agent.indexOf("Edge/")>-1||returnAppId===true&&(agent.indexOf("Edg/")>-1||agent.indexOf("EdgiOS/")>-1||agent.indexOf("EdgA/")>-1))return"Edge";if(agent.indexOf("MSIE")>-1||agent.indexOf("Trident")>-1)return"MSIE";if(agent.indexOf("Opera")>-1||returnAppId===true&&(agent.indexOf("OPR/")>-1||agent.indexOf("OPT/")>-1))return"Opera";if(agent.indexOf("OPT/")>-1&&(agent.indexOf("iPhone;")>-1||agent.indexOf("iPad;")>-1))return"Safari";if(agent.indexOf("Firefox")>-1||returnAppId===true&&agent.indexOf("FxiOS/")>-1)return"Firefox";if(agent.indexOf("Chrome")>-1||returnAppId===true&&agent.indexOf("CriOS/")>-1)return"Chrome";if(agent.indexOf("Safari")>-1)return"Safari";return"Unknown"};Fit.Browser.GetVersion=function(returnAppVersion){Fit.Validation.ExpectBoolean(returnAppVersion,true);var browser=Fit.Browser.GetBrowser(returnAppVersion);var start=0;var end=0;var agent=Fit._internal.Browser.UserAgent;if(browser==="Edge"){var search=agent.indexOf("Edge/")>-1&&"Edge/"||agent.indexOf("Edg/")>-1&&"Edg/"||agent.indexOf("EdgiOS/")>-1&&"EdgiOS/"||agent.indexOf("EdgA/")>-1&&"EdgA/"||null;start=search!==null&&agent.indexOf(search)||-1;start=start!==-1?start+search.length:0;end=agent.indexOf(".",start);end=end!==-1?end:0}else if(browser==="Chrome"){var search=agent.indexOf("Chrome/")>-1&&"Chrome/"||agent.indexOf("CriOS/")>-1&&"CriOS/"||null;start=search!==null&&agent.indexOf(search)||-1;start=start!==-1?start+search.length:0;end=agent.indexOf(".",start);end=end!==-1?end:0}else if(browser==="Safari"){var search=agent.indexOf("CriOS/")>-1&&"CriOS/"||agent.indexOf("FxiOS/")>-1&&"FxiOS/"||agent.indexOf("EdgiOS/")>-1&&"EdgiOS/"||agent.indexOf("OPT/")>-1&&"OPT/"||null;if(search!==null){if(returnAppVersion!==true){start=agent.indexOf(" OS ");start=start!==-1?start+4:0;end=agent.indexOf("_",start);end=end!==-1?end:0}else{start=agent.indexOf(search);start=start!==-1?start+search.length:0;end=agent.indexOf(".",start);end=end!==-1?end:0}}else{start=agent.indexOf("Version/");start=start!==-1?start+8:0;end=agent.indexOf(".",start);end=end!==-1?end:0}}else if(browser==="MSIE"){if(agent.indexOf("MSIE")>-1){start=agent.indexOf("MSIE ");start=start!==-1?start+5:0;end=agent.indexOf(".",start);end=end!==-1?end:0}else if(agent.indexOf("Trident")>-1){start=agent.indexOf("rv:");start=start!==-1?start+3:0;end=agent.indexOf(".",start);end=end!==-1?end:0}}else if(browser==="Firefox"){var search=agent.indexOf("Firefox/")>-1&&"Firefox/"||agent.indexOf("FxiOS/")>-1&&"FxiOS/"||null;start=search!==null&&agent.indexOf(search)||-1;start=start!==-1?start+search.length:0;end=agent.indexOf(".",start);end=end!==-1?end:0}else if(browser==="Opera"){var search=agent.indexOf("Version/")>-1&&"Version/"||agent.indexOf("Opera ")>-1&&"Opera "||agent.indexOf("Opera/")>-1&&"Opera/"||agent.indexOf("OPR/")>-1&&"OPR/"||agent.indexOf("OPT/")>-1&&"OPT/"||null;start=search!==null&&agent.indexOf(search)||-1;start=start!==-1?start+search.length:0;end=agent.indexOf(".",start);end=end!==-1?end:0}if(start!==0&&start!==0)return parseInt(agent.substring(start,end));return-1};Fit.Browser.GetQueryString=function(alternativeUrl){Fit.Validation.ExpectString(alternativeUrl,true);var qs={Url:null,Parameters:{},Hash:null,Anchor:null};var url=alternativeUrl!==undefined?alternativeUrl:location.href;var params=url.indexOf("?")>-1?url.split("?")[1]:"";var hash=null;params=params.indexOf("#")>-1?params.split("#")[0]:params;hash=url.indexOf("#")>-1?url.split("#")[1]:null;qs.Url=url;qs.Hash=hash;qs.Anchor=hash;Fit.Array.ForEach(params!==""?params.split("&"):[],function(p){var keyval=p.split("=");try{qs.Parameters[decodeURIComponent(keyval[0])]=keyval.length>1?decodeURIComponent(keyval[1]):""}catch(err){qs.Parameters[keyval[0]]=keyval.length>1?keyval[1]:""}});return qs};Fit.Browser.ParseUrl=function(url){Fit.Validation.ExpectString(url);var doubleSlashes=/(^.*:\/\/.*?)\/\/(.*)/;while(doubleSlashes.test(url)===true){url=url.replace(doubleSlashes,"$1/$2")}var regEx=/(.+):\/\/((.+)@)?((.+):((\d+)\/?)?|(.+?)\/|(.+?)$)((.*)\?(.+)|(.*)#(.*)|(.*)$)/;var match=regEx.exec(url);var result={Url:null,Protocol:null,Port:null,Auth:null,Host:null,FullPath:null,Path:null,Resource:null,Parameters:{},Hash:null,Anchor:null};if(match===null){Fit.Validation.ThrowError("Unable to parse invalid URL - valid example: schema://[auth@]host[:port][/path/resource[?parm=val[#hash]]]")}if(match.length!==16){Fit.Validation.ThrowError("Unexpected parse error - internal error")}var fullPath=match[11]||match[13]||match[15]||"";var qs=Fit.Browser.GetQueryString(url);result.Url=url;result.Protocol=match[1].toLowerCase();result.Auth=match[3]||null;result.Host=match[5]||match[8]||match[9];result.Port=match[7]?parseInt(match[7]):-1;result.FullPath="/"+fullPath;result.Parameters=qs.Parameters;result.Hash=qs.Hash;result.Anchor=qs.Hash;result.Path="/";if(fullPath!==""){var pathInfo=fullPath.split("/");if(pathInfo.length===1){result.Resource=fullPath}else{result.Path+=pathInfo.slice(0,-1).join("/")+"/";if(pathInfo[pathInfo.length-1]!==""){result.Resource=pathInfo[pathInfo.length-1]}}}return result};Fit.Browser.GetLanguage=function(){var lang=null;if(navigator.language)lang=navigator.language.toLowerCase();else if(navigator.browserLanguage)lang=navigator.browserLanguage.toLowerCase();if(lang===null||lang==="")return"en";if(lang.length===2)return lang;if(lang.length===5)return lang.substring(0,2);return"en"};Fit.Browser.GetPageWidth=function(){var w=0;if(window.innerWidth){w=window.innerWidth}else if(document.documentElement&&document.documentElement.clientWidth){w=document.documentElement.clientWidth;if(document.documentElement.scrollHeight>document.documentElement.clientHeight){w+=Fit.Browser.GetScrollBarSize()}}return w};Fit.Browser.GetPageHeight=function(){var h=0;if(window.innerHeight){h=window.innerHeight}else if(document.documentElement&&document.documentElement.clientHeight){h=document.documentElement.clientHeight;if(document.documentElement.scrollWidth>document.documentElement.clientWidth){h+=Fit.Browser.GetScrollBarSize()}}return h};Fit.Browser.GetViewPortDimensions=function(includeScrollbars){Fit.Validation.ExpectBoolean(includeScrollbars,true);var dim={Width:Fit.Browser.GetPageWidth(),Height:Fit.Browser.GetPageHeight()};if(includeScrollbars!==true){if(Fit.Browser.GetScrollDocument().scrollWidth>dim.Width){dim.Height=dim.Height-Fit.Browser.GetScrollBarSize()}if(Fit.Browser.GetScrollDocument().scrollHeight>dim.Height){dim.Width=dim.Width-Fit.Browser.GetScrollBarSize()}}return dim};Fit.Browser.GetScrollPosition=function(){var x=document.body.scrollLeft||document.documentElement.scrollLeft||window.pageXOffset||0;var y=document.body.scrollTop||document.documentElement.scrollTop||window.pageYOffset||0;return{X:x,Y:y}};Fit.Browser.GetScrollDocument=function(){if(Fit._internal.Browser.ScrollDocument===undefined){if(document.scrollingElement){Fit._internal.Browser.ScrollDocument=document.scrollingElement}else{var iframe=document.createElement("iframe");iframe.style.cssText="height: 1px; position: fixed; top: -100px; left: -100px;";document.documentElement.appendChild(iframe);var doc=iframe.contentWindow.document;doc.write("<!DOCTYPE html><div style='height: 100px'>&nbsp;</div>");doc.close();if(doc.documentElement.scrollHeight>doc.body.scrollHeight){Fit._internal.Browser.ScrollDocument=document.documentElement}else{Fit._internal.Browser.ScrollDocument=document.body}iframe.parentNode.removeChild(iframe)}}return Fit._internal.Browser.ScrollDocument};Fit.Browser.GetScrollBars=function(){var res={Vertical:{Enabled:false,Size:0},Horizontal:{Enabled:false,Size:0}};var doc=Fit.Browser.GetScrollDocument();if(doc.clientWidth<doc.scrollWidth&&Fit.Browser.GetComputedStyle(document.body,"overflow-x")!=="hidden"&&Fit.Browser.GetComputedStyle(document.documentElement,"overflow-x")!=="hidden"){res.Horizontal.Enabled=true;res.Horizontal.Size=Fit.Browser.GetScrollBarSize()}if(doc.clientHeight<doc.scrollHeight&&Fit.Browser.GetComputedStyle(document.body,"overflow-y")!=="hidden"&&Fit.Browser.GetComputedStyle(document.documentElement,"overflow-y")!=="hidden"){res.Vertical.Enabled=true;res.Vertical.Size=Fit.Browser.GetScrollBarSize()}return res};Fit.Browser.GetScrollBarSize=function(){if(Fit._internal.Browser.ScrollBarWidth===undefined){var outer=document.createElement("div");outer.style.cssText="visibility: hidden; overflow: scroll; position: fixed; top: -100px; left: -100px;";document.documentElement.appendChild(outer);var inner=document.createElement("div");outer.appendChild(inner);Fit._internal.Browser.ScrollBarWidth=outer.offsetWidth-inner.offsetWidth;outer.parentNode.removeChild(outer)}return Fit._internal.Browser.ScrollBarWidth};Fit.Browser.GetComputedStyle=function(elm,style){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectStringValue(style);var res=null;if(window.getComputedStyle){res=window.getComputedStyle(elm)[style]}else if(elm.currentStyle){if(style.indexOf("-")!==-1){var items=style.split("-");style="";Fit.Array.ForEach(items,function(i){if(style==="")style=i;else style+=i[0].toUpperCase()+i.slice(1)})}res=elm.currentStyle[style];if(res!==undefined&&res!==null&&/^\d+/.test(res)===true&&res.toLowerCase().indexOf("px")===-1){var orgLeft=elm.style.left;var runtimeStyle=elm.runtimeStyle.left;elm.runtimeStyle.left=elm.currentStyle.left;elm.style.left=style==="fontSize"?"1em":res||0;res=elm.style.pixelLeft+"px";elm.style.left=orgLeft;elm.runtimeStyle.left=runtimeStyle}}return res!==undefined?res:null};Fit.Browser.GetScreenWidth=function(onlyAvailable){Fit.Validation.ExpectBoolean(onlyAvailable,true);if(onlyAvailable===true)return window.screen.availWidth;return window.screen.width};Fit.Browser.GetScreenHeight=function(onlyAvailable){Fit.Validation.ExpectBoolean(onlyAvailable,true);if(onlyAvailable===true)return window.screen.availHeight;return window.screen.height};Fit.Browser.GetScreenDimensions=function(onlyAvailable){Fit.Validation.ExpectBoolean(onlyAvailable,true);return{Width:Fit.Browser.GetScreenWidth(onlyAvailable),Height:Fit.Browser.GetScreenHeight(onlyAvailable)}};Fit.Browser.IsMobile=function(includeTablets){Fit.Validation.ExpectBoolean(includeTablets,true);var nav=Fit._internal.Browser.UserAgent;if(includeTablets!==false&&/android|ipad|playbook|silk/i.test(nav))return true;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(nav)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(nav.substr(0,4))};Fit.Browser.IsTouchEnabled=function(){return"ontouchstart"in window};Fit.Browser.Log=function(msg){if(window.console)console.log(msg)};Fit.Browser.Debug=function(msg){if(window.console&&Fit._internal.Validation.DebugMode===true)console.log(msg)};Fit.Browser.LogDeprecated=function(msg){Fit.Validation.ExpectString(msg);if(window.console&&console.warn)console.warn(msg);else Fit.Browser.Log(msg)};Fit.Browser.GetInfo=function(returnAppInfo){Fit.Validation.ExpectBoolean(returnAppInfo,true);if(returnAppInfo===true){if(!Fit._internal.Browser.AppInfo){Fit._internal.Browser.AppInfo=Fit.Browser.GetInfo();Fit._internal.Browser.AppInfo.Name=Fit.Browser.GetBrowser(true);Fit._internal.Browser.AppInfo.Version=Fit.Browser.GetVersion(true)}return Fit.Core.Clone(Fit._internal.Browser.AppInfo)}if(!Fit._internal.Browser.Info){Fit._internal.Browser.Info={};Fit._internal.Browser.Info.Name=Fit.Browser.GetBrowser();Fit._internal.Browser.Info.Version=Fit.Browser.GetVersion();Fit._internal.Browser.Info.Language=Fit.Browser.GetLanguage();Fit._internal.Browser.Info.IsMobile=Fit.Browser.IsMobile();Fit._internal.Browser.Info.IsPhone=Fit.Browser.IsMobile(false);Fit._internal.Browser.Info.IsTablet=Fit.Browser.IsMobile()===true&&Fit.Browser.IsMobile(false)===false;Fit._internal.Browser.Info.IsTouchEnabled=Fit.Browser.IsTouchEnabled()}return Fit.Core.Clone(Fit._internal.Browser.Info)};Fit.Browser.IsStorageSupported=function(){if(Fit._internal.Browser.StorageSupported===undefined){Fit._internal.Browser.StorageSupported=false;try{if(window.localStorage&&window.sessionStorage){var x="__FITUITEST__";localStorage.setItem(x,x);localStorage.removeItem(x);sessionStorage.setItem(x,x);sessionStorage.removeItem(x);Fit._internal.Browser.StorageSupported=true}}catch(err){}}return Fit._internal.Browser.StorageSupported};Fit.Controls={};Fit._internal.Controls={};Fit._internal.ControlBase={Controls:{}};Fit.Controls.Component=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);var me=this;var id=null;var container=null;var isIe8=Fit.Browser.GetInfo().Name==="MSIE"&&Fit.Browser.GetInfo().Version===8;function init(){Fit._internal.Core.EnsureStyles();id=Fit.Validation.IsSet(controlId)===true?controlId:"Ctl"+Fit.Data.CreateGuid();if(Fit._internal.ControlBase.Controls[id]!==undefined)Fit.Validation.ThrowError("Control with ID '"+id+"' has already been defined - Control IDs must be unique!");Fit._internal.ControlBase.Controls[id]=me;container=document.createElement("div");container.id=id;container._internal={Instance:me};Fit.Dom.Data(container,"device",Fit.Device.OptimizeForTouch===false?"Desktop":"Touch")}this.GetId=function(){return id};this.GetDomElement=function(){return container};this.Render=function(toElement){Fit.Validation.ExpectDomElement(toElement,true);if(Fit.Validation.IsSet(toElement)===true){Fit.Dom.Add(toElement,me.GetDomElement())}else{var script=document.scripts[document.scripts.length-1];Fit.Dom.InsertBefore(script,me.GetDomElement())}};this.Dispose=function(){Fit.Dom.Remove(container);delete container._internal;delete Fit._internal.ControlBase.Controls[id];me=id=container=isIe8=null};this._internal=this._internal?this._internal:{};this._internal.Repaint=function(f){Fit.Validation.ExpectFunction(f,true);var cb=Fit.Validation.IsSet(f)===true?f:function(){};if(isIe8===false){cb()}else{Fit.Dom.AddClass(me.GetDomElement(),"FitUi_Non_Existing_ControlBase_Class");Fit.Dom.RemoveClass(me.GetDomElement(),"FitUi_Non_Existing_ControlBase_Class");setTimeout(function(){if(me===null)return;cb();Fit.Dom.AddClass(me.GetDomElement(),"FitUi_Non_Existing_ControlBase_Class");Fit.Dom.RemoveClass(me.GetDomElement(),"FitUi_Non_Existing_ControlBase_Class")},0)}};this._internal.IsIe8=function(){return isIe8};init()};Fit.Controls.ControlBase=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.Component).Apply(controlId);this.Value=function(val,preserveDirtyState){Fit.Validation.ThrowError("Not implemented")};this.UserValue=function(val){return me.Value(val,true)};this.IsDirty=function(){Fit.Validation.ThrowError("Not implemented")};this.Clear=function(){Fit.Validation.ThrowError("Not implemented")};this.Focused=function(val){Fit.Validation.ThrowError("Not implemented")};var me=this;var container=me.GetDomElement();var width={Value:200,Unit:"px"};var height={Value:-1,Unit:"px"};var scope=null;var required=false;var orgDirtyFunction=null;var validationExpr=null;var validationError=null;var validationErrorType=-1;var validationCallbackFunc=null;var validationCallbackError=null;var validationHandlerFunc=null;var validationHandlerError=null;var validationRules=[];var validationRuleError=null;var lazyValidation=false;var lazyValidationDisabled=false;var hideValidationErrorOnChanging=true;var hasValidated=false;var blockAutoPostBack=false;var onChangeHandlers=[];var onFocusHandlers=[];var onBlurHandlers=[];var hasFocus=false;var onBlurTimeout=null;var ensureFocusFires=false;var waitingForFocus=false;var focusStateLocked=false;var txtValue=null;var txtDirty=null;var txtValid=null;var txtEnabled=null;var baseControlDisabled=false;var ie8DisabledLayer=null;function init(){Fit.Dom.AddClass(container,"FitUiControl");me._internal.Data("focused","false");me._internal.Data("valid","true");me._internal.Data("dirty","false");me._internal.Data("enabled","true");me._internal.Data("showinvalid","true");txtValue=document.createElement("textarea");txtValue.style.display="none";txtValue.name="FitUIValue"+me.GetId();Fit.Dom.Add(container,txtValue);txtDirty=document.createElement("input");txtDirty.type="hidden";txtDirty.name="FitUIDirty"+me.GetId();Fit.Dom.Add(container,txtDirty);txtValid=document.createElement("input");txtValid.type="hidden";txtValid.name="FitUIValid"+me.GetId();Fit.Dom.Add(container,txtValid);txtEnabled=document.createElement("input");txtEnabled.type="hidden";txtEnabled.name="FitUIEnabled"+me.GetId();Fit.Dom.Add(container,txtEnabled);me.OnChange(function(sender){if(blockAutoPostBack===false&&me.AutoPostBack()===true&&document.forms.length>0){setTimeout(function(){blockAutoPostBack=true;document.forms[0].submit();setTimeout(function(){blockAutoPostBack=false},500)},0)}});if(me._internal.IsIe8()===false){Fit.Events.AddHandler(container,"focus",true,onFocusIn);Fit.Events.AddHandler(container,"blur",true,onFocusOut)}else{container.onfocusin=onFocusIn;container.onfocusout=onFocusOut}me.OnBlur(function(sender){if(lazyValidation===true&&lazyValidationDisabled===false){lazyValidationDisabled=true;me._internal.Validate()}me._internal.Data("showinvalid","true")});me.OnChange(function(sender){if(hideValidationErrorOnChanging===true&&me.Focused()===true){me._internal.Data("showinvalid","false")}});Fit.Internationalization.OnLocaleChanged(localize)}this.AutoPostBack=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){me._internal.Data("autopost",val.toString())}return me._internal.Data("autopost")==="true"};this.GetDomElement=Fit.Core.CreateOverride(this.GetDomElement,function(){if(hasValidated===false){hasValidated=true;me._internal.Validate();updateInternalState()}return base()});this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){Fit.Internationalization.RemoveOnLocaleChanged(localize);me=container=width=height=scope=required=validationExpr=validationError=validationErrorType=validationCallbackFunc=validationCallbackError=validationHandlerFunc=validationHandlerError=validationRules=validationRuleError=lazyValidation=lazyValidationDisabled=hideValidationErrorOnChanging=hasValidated=blockAutoPostBack=onChangeHandlers=onFocusHandlers=onBlurHandlers=hasFocus=onBlurTimeout=ensureFocusFires=waitingForFocus=focusStateLocked=txtValue=txtDirty=txtValid=txtEnabled=baseControlDisabled=ie8DisabledLayer=null;base()});this.Width=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){if(val>-1){width={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};container.style.width=width.Value+width.Unit}else{width={Value:200,Unit:"px"};container.style.width=""}}return width};this.Height=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){height={Value:val,Unit:Fit.Validation.IsSet(unit)===true&&val!==-1?unit:"px"};if(height.Value>-1)container.style.height=height.Value+height.Unit;else container.style.height=""}return height};this.AddCssClass=function(val){Fit.Validation.ExpectStringValue(val);Fit.Dom.AddClass(container,val)};this.RemoveCssClass=function(val){Fit.Validation.ExpectStringValue(val);Fit.Dom.RemoveClass(container,val)};this.HasCssClass=function(val){Fit.Validation.ExpectStringValue(val);return Fit.Dom.HasClass(container,val)};this.Enabled=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==me.Enabled()){baseControlDisabled=val===false;var disableSelector="input, textarea, select, button";var disableEvents={contextmenu:preventEventDefault,click:stopEventPropagation,dblclick:stopEventPropagation,mousedown:stopEventPropagation,mouseup:stopEventPropagation,mousemove:stopEventPropagation,keydown:stopEventPropagation,keypress:stopEventPropagation,keyup:stopEventPropagation,touchstart:stopEventPropagation,touchmove:stopEventPropagation,touchend:stopEventPropagation,touchcancel:stopEventPropagation};var dom=me.GetDomElement();me._internal.Data("enabled",val===true?"true":"false");if(val===false){me.Focused(false);if(me._internal.IsIe8()===false){Fit.Array.ForEach(disableEvents,function(eventName){Fit.Events.AddHandler(dom,eventName,true,disableEvents[eventName])})}else{ie8DisabledLayer=document.createElement("div");ie8DisabledLayer.className="FitUiControlDisabledLayer";Fit.Dom.Add(me.GetDomElement(),ie8DisabledLayer)}Fit.Array.ForEach(dom.querySelectorAll(disableSelector),function(elm){if(elm===txtValue||elm===txtDirty||elm===txtValid||elm===txtEnabled){return}elm._fitDisabled=elm.disabled;elm.disabled=true;elm._fitReadOnly=elm.readOnly;elm.readOnly=true});Fit.Array.CustomRecurse([dom],function(elm){if(Fit.Dom.Attribute(elm,"tabindex")!==null){elm._fitTabIndex=elm.tabIndex;Fit.Dom.Attribute(elm,"tabindex",null);if(elm.tagName==="A"){elm.tabIndex=-1}}return elm.children})}else if(val===true){if(me._internal.IsIe8()===false){Fit.Array.ForEach(disableEvents,function(eventName){Fit.Events.RemoveHandler(dom,eventName,true,disableEvents[eventName])})}else{Fit.Dom.Remove(ie8DisabledLayer);ie8DisabledLayer=null}Fit.Array.ForEach(dom.querySelectorAll(disableSelector),function(elm){elm.disabled=elm._fitDisabled;elm._fitDisabled=undefined;elm.readOnly=elm._fitReadOnly;elm._fitReadOnly=undefined});Fit.Array.CustomRecurse([dom],function(elm){if(elm._fitTabIndex!==undefined){elm.tabIndex=elm._fitTabIndex;elm._fitTabIndex=undefined}return elm.children})}updateInternalState();me._internal.Repaint()}return me._internal.Data("enabled")==="true"};this.Visible=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true)container.style.display=val===true?"":"none";return container.style.display!=="none"};this.Required=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){required=val;me._internal.Validate()}return required};this.Scope=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){if(val==="")scope=null;else scope=val}return scope};this.AlwaysDirty=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&orgDirtyFunction===null){orgDirtyFunction=this.IsDirty;this.IsDirty=function(){return true};updateInternalState()}else if(val===false&&orgDirtyFunction!==null){this.IsDirty=orgDirtyFunction;orgDirtyFunction=null;updateInternalState()}}return orgDirtyFunction!==null};this.SetValidationExpression=function(regEx,errorMsg){Fit.Validation.ExpectRegExp(regEx,true);Fit.Validation.ExpectString(errorMsg,true);Fit.Browser.LogDeprecated("Use of deprecated function SetValidationExpression - please use AddValidationRule instead");validationExpr=regEx?regEx:null;validationError=errorMsg?errorMsg:null;me._internal.Validate()};this.SetValidationCallback=function(cb,errorMsg){Fit.Validation.ExpectFunction(cb,true);Fit.Validation.ExpectString(errorMsg,true);Fit.Browser.LogDeprecated("Use of deprecated function SetValidationCallback - please use AddValidationRule instead");validationHandlerFunc=null;validationCallbackFunc=cb?cb:null;validationCallbackError=errorMsg?errorMsg:null;me._internal.Validate()};this.SetValidationHandler=function(cb){Fit.Validation.ExpectFunction(cb,true);Fit.Browser.LogDeprecated("Use of deprecated function SetValidationHandler - please use AddValidationRule instead");validationCallbackFunc=null;validationHandlerFunc=cb?cb:null;validationHandlerError=null;me._internal.Validate()};this.AddValidationRule=function(validator,errorMessage){Fit.Validation.ExpectIsSet(validator);Fit.Validation.ExpectString(errorMessage,true);if(typeof validator==="function"){Fit.Validation.ExpectFunction(validator);validationRules.push({Type:"Callback",Validator:validator,ErrorMessage:null})}else{Fit.Validation.ExpectRegExp(validator);validationRules.push({Type:"RegExp",Validator:validator,ErrorMessage:errorMessage||null})}me._internal.Validate()};this.RemoveValidationRule=function(validator){Fit.Validation.ExpectIsSet(validator);var found=null;Fit.Array.ForEach(validationRules,function(rule){if(rule.Validator===validator){found=rule;return false}});if(found!==null){Fit.Array.Remove(validationRules,found)}me._internal.Validate()};this.RemoveAllValidationRules=function(){validationRules=[];me._internal.Validate()};this.IsValid=function(){validationErrorType=-1;validationHandlerError=null;validationRuleError=null;if(validationExpr===null&&validationCallbackFunc===null&&validationHandlerFunc===null&&required===false&&validationRules.length===0)return true;var obj=me.Value();var val=Fit.Validation.IsSet(obj)===true?obj.toString():"";if(required===true&&val===""){validationErrorType=0;return false}if(validationExpr!==null&&validationExpr.test(val)===false){validationErrorType=1;return false}if(validationHandlerFunc!==null){var errorMessage=validationHandlerFunc(me,val);if(errorMessage!==null&&errorMessage!==""&&typeof errorMessage==="string"){validationErrorType=2;validationHandlerError=errorMessage;return false}}else if(validationCallbackFunc!==null&&validationCallbackFunc(val)===false){validationErrorType=3;return false}if(validationRules.length>0){Fit.Array.ForEach(validationRules,function(rule){if(rule.Type==="Callback"){var result=rule.Validator(me);if(result===false||typeof result==="string"&&result!==""){validationErrorType=4;validationRuleError=result||null;return false}}else{if(rule.Validator.test(me.Value())===false){validationErrorType=4;validationRuleError=rule.ErrorMessage;return false}}});if(validationErrorType===4){return false}}return true};this.LazyValidation=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){lazyValidation=val;lazyValidationDisabled=false;if(lazyValidation===true){me._internal.Data("valid","true");me._internal.Data("errormessage",null);Fit.Dom.Attribute(me.GetDomElement(),"title",null)}else{me._internal.Validate()}}return lazyValidation};this.ShowValidationErrorsOnChange=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==!hideValidationErrorOnChanging){hideValidationErrorOnChanging=!val;me._internal.Data("showinvalid","true")}return!hideValidationErrorOnChanging};this.OnChange=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onChangeHandlers,cb)};this.OnFocus=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onFocusHandlers,cb)};this.OnBlur=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onBlurHandlers,cb)};this._internal=this._internal?this._internal:{};this._internal.DisableAndKeepFocus=function(){if(me.Focused()===true){me.Enabled(false);clearTimeout(onBlurTimeout);onBlurTimeout=null;var dom=me.GetDomElement();var orgTabIndex=Fit.Dom.Attribute(dom,"tabindex");Fit.Dom.Attribute(dom,"tabindex","-1");dom.focus({preventScroll:true});return function(){me.Enabled(true);if(hasFocus===true){me.Focused(true)}Fit.Dom.Attribute(dom,"tabindex",orgTabIndex)}}else{me.Enabled(false);return function(){me.Enabled(true)}}};function stopEventPropagation(e){Fit.Events.StopPropagation(e);if(e.type==="click"&&Fit.Events.GetTarget(e).tagName==="A"){preventEventDefault(e)}}function preventEventDefault(e){Fit.Events.PreventDefault(e)}function onFocusIn(e){if(baseControlDisabled===true&&Fit.Dom.GetFocused()!==me.GetDomElement()){var focused=Fit.Dom.GetFocused();if(me._internal.IsIe8()===true&&focused===ie8DisabledLayer){return}if(focused.tagName!=="A"||focused.tabIndex>=0){var msg="";msg+="Disabled control '"+me.GetId()+"' received focus because an object was introduced in the control ";msg+="that is focusable, which did not exist when the control was disabled. Control's disabled state will ";msg+="now be updated to prevent this from happening again with the control's current state. Since the control ";msg+="has already received focus, and we do not know the exact tab navigation order of the page, focus will ";msg+="now be returned to the component previously focused. The user will experience this as TAB navigation ";msg+="being ignored for this keystroke, but it will work the next time. To avoid this, make sure to disable ";msg+="the control once it is ready - e.g. fully populated.";console.warn(msg);me.Enabled(true);me.Enabled(false)}var related=Fit.Events.GetRelatedTarget(e);if(related!==null&&related.tabIndex>=0){related.focus()}else{Fit.Dom.GetFocused().blur()}}if(me.Enabled()===false)return;if(focusStateLocked===true)return;if(onBlurTimeout!==null){clearTimeout(onBlurTimeout);onBlurTimeout=null}if(waitingForFocus===true){waitingForFocus=false;return}if(hasFocus===true)return;hasFocus=true;ensureFocusFires=true;setTimeout(function(){if(me===null)return;ensureFocusFires=false;me._internal.FireOnFocus()},0)}function onFocusOut(e){if(me===null)return;if(hasFocus===false)return;if(focusStateLocked===true)return;if(onBlurTimeout!==null){clearTimeout(onBlurTimeout);onBlurTimeout=null}var fireBlur=null;fireBlur=function(){if(me===null)return;if(ensureFocusFires===true){waitingForFocus=true;onBlurTimeout=setTimeout(fireBlur,0);return}onBlurTimeout=null;waitingForFocus=false;hasFocus=false;me._internal.FireOnBlur()};onBlurTimeout=setTimeout(fireBlur,0)}function updateInternalState(){txtValue.value=me.Value().toString();txtDirty.value=me.IsDirty()===true?"1":"0";txtValid.value=me.IsValid()===true?"1":"0";txtEnabled.value=me.Enabled()===true?"1":"0";me._internal.Data("dirty",me.IsDirty()===true?"true":"false")}function localize(){if(validationErrorType===0){var locale=Fit.Internationalization.GetSystemLocale();me._internal.Data("errormessage",locale.Translations.Required);if(me._internal.IsIe8()===true){Fit.Dom.Attribute(me.GetDomElement(),"title",locale.Translations.Required)}}}this._internal.FireOnChange=function(){hasValidated=true;me._internal.Validate();updateInternalState();Fit.Array.ForEach(onChangeHandlers,function(cb){cb(me)})};this._internal.FireOnFocus=function(){ensureFocusFires=false;me._internal.Data("focused","true");me._internal.Repaint();Fit.Array.ForEach(onFocusHandlers,function(cb){cb(me)})};this._internal.FireOnBlur=function(){me._internal.Data("focused","false");me._internal.Repaint();Fit.Array.ForEach(onBlurHandlers,function(cb){cb(me)})};this._internal.FocusStateLocked=function(value){Fit.Validation.ExpectBoolean(value,true);if(Fit.Validation.IsSet(value)===true){if(value!==focusStateLocked){focusStateLocked=value;var meElement=me.GetDomElement();var focusElement=Fit.Dom.GetFocused();hasFocus=meElement===focusElement||Fit.Dom.Contained(meElement,focusElement)===true}}return focusStateLocked};this._internal.ExecuteWithNoOnChange=function(cb){Fit.Validation.ExpectFunction(cb);var onChangeHandler=me._internal.FireOnChange;me._internal.FireOnChange=function(){};me._internal.FireOnChangeSuppressed=true;var error=null;try{cb()}catch(err){error=err.message}me._internal.FireOnChange=onChangeHandler;me._internal.FireOnChangeSuppressed=false;if(error!==null)Fit.Validation.ThrowError(error)};this._internal.FireOnChangeSuppressed=false;this._internal.Data=function(key,val){Fit.Validation.ExpectStringValue(key);Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true||val===null)Fit.Dom.Data(container,key,val);return Fit.Dom.Data(container,key)};this._internal.AddDomElement=function(elm){Fit.Validation.ExpectDomElement(elm);Fit.Dom.InsertBefore(txtValue,elm)};this._internal.RemoveDomElement=function(elm){Fit.Validation.ExpectDomElement(elm);Fit.Dom.Remove(elm)};this._internal.Validate=function(force){Fit.Validation.ExpectBoolean(force,true);if(force===true){lazyValidationDisabled=true}if(lazyValidation===true&&lazyValidationDisabled===false&&me.Focused()===false)return;var valid=me.IsValid();me._internal.Data("valid",valid.toString());if(valid===false){me._internal.Data("errormessage",null);if(validationErrorType===0)me._internal.Data("errormessage",Fit.Internationalization.GetSystemLocale().Translations.Required);else if(validationErrorType===1&&validationError!==null)me._internal.Data("errormessage",validationError.replace("\r","").replace(/<br.*>/i,"\n"));else if(validationErrorType===2&&validationHandlerError!==null)me._internal.Data("errormessage",validationHandlerError.replace("\r","").replace(/<br.*>/i,"\n"));else if(validationErrorType===3&&validationCallbackError!==null)me._internal.Data("errormessage",validationCallbackError.replace("\r","").replace(/<br.*>/i,"\n"));else if(validationErrorType===4&&validationRuleError!==null)me._internal.Data("errormessage",validationRuleError.replace("\r","").replace(/<br.*>/i,"\n"))}else{me._internal.Data("errormessage",null)}if(me._internal.IsIe8()===true){Fit.Dom.Attribute(me.GetDomElement(),"title",me._internal.Data("errormessage"))}me._internal.Repaint()};this._internal.UpdateInternalState=function(){updateInternalState()};init()};Fit.Controls.Find=function(id,expectedType){Fit.Validation.ExpectStringValue(id);return Fit._internal.ControlBase.Controls[id]!==undefined?Fit._internal.ControlBase.Controls[id]:null};Fit.Controls.ValidateAll=function(scope){Fit.Validation.ExpectStringValue(scope,true);var result=true;Fit.Array.ForEach(Fit._internal.ControlBase.Controls,function(controlId){var control=Fit._internal.ControlBase.Controls[controlId];if(Fit.Core.InstanceOf(control,Fit.Controls.ControlBase)===false)return;if(Fit.Validation.IsSet(scope)===true&&control.Scope()!==scope)return;control._internal.Validate(true);if(control.IsValid()===false)result=false});return result};Fit.Controls.DirtyCheckAll=function(scope){Fit.Validation.ExpectStringValue(scope,true);var result=false;Fit.Array.ForEach(Fit._internal.ControlBase.Controls,function(controlId){var control=Fit._internal.ControlBase.Controls[controlId];if(Fit.Core.InstanceOf(control,Fit.Controls.ControlBase)===false)return;if(Fit.Validation.IsSet(scope)===true&&control.Scope()!==scope)return;if(control.IsDirty()===true){result=true;return false}});return result};Fit._internal.ControlBase.ReduceDocumentRootPollution=false;Fit.Cookies=function(){var me=this;var path=location.pathname.match(/^.*\//)[0];var domain=null;var sameSite=null;var secure=false;var prefix=null;function init(){path=path.substring(0,path.length-1)}this.Path=function(val){Fit.Validation.ExpectStringValue(val,true);if(Fit.Validation.IsSet(val)===true){path=val}return path};this.Domain=function(val){Fit.Validation.ExpectStringValue(val,true);if(val!==undefined){domain=val}return domain};this.SameSite=function(val){Fit.Validation.ExpectStringValue(val,true);if(val==="None"||val==="Lax"||val==="Strict"||val===null){sameSite=val}return sameSite};this.Secure=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){secure=val}return secure};this.Prefix=function(val){Fit.Validation.ExpectString(val,true);if(val!==undefined){prefix=val}return prefix};this.Set=function(name,value,seconds){Fit.Validation.ExpectStringValue(name);Fit.Validation.ExpectString(value);Fit.Validation.ExpectInteger(seconds,true);Fit.Cookies.Set((prefix||"")+name,value,seconds,path||undefined,domain||undefined,sameSite||undefined,secure||undefined)};this.Get=function(name){Fit.Validation.ExpectStringValue(name);return Fit.Cookies.Get((prefix||"")+name)};this.Remove=function(name){Fit.Validation.ExpectStringValue(name);Fit.Cookies.Set((prefix||"")+name,"",-1,path||undefined,domain||undefined)};init()};Fit.Cookies.Set=function(){var name=undefined;var value=undefined;var seconds=undefined;var path=undefined;var domain=undefined;var sameSite=undefined;var secure=undefined;if(arguments.length===1){Fit.Validation.ExpectObject(arguments[0]);name=arguments[0].Name;value=arguments[0].Value;seconds=arguments[0].Seconds;path=arguments[0].Path;domain=arguments[0].Domain;sameSite=arguments[0].SameSite;secure=arguments[0].Secure}else{name=arguments[0];value=arguments[1];seconds=arguments[2];path=arguments[3];domain=arguments[4];sameSite=arguments[5];secure=arguments[6]}Fit.Validation.ExpectStringValue(name);Fit.Validation.ExpectString(value);Fit.Validation.ExpectInteger(seconds,true);Fit.Validation.ExpectStringValue(path,true);Fit.Validation.ExpectStringValue(domain,true);Fit.Validation.ExpectStringValue(sameSite,true);Fit.Validation.ExpectBoolean(secure,true);if(value.indexOf(";")>-1)Fit.Validation.ThrowError("Unable to set cookie - value contains illegal character: ';'");value=value.replace(/\n/g,"\\n");var newCookie=name+"="+value;if(Fit.Validation.IsSet(seconds)===true){var date=new Date;date.setTime(date.getTime()+seconds*1e3);newCookie+="; expires="+date.toGMTString()}if(Fit.Validation.IsSet(path)===true){newCookie+="; path="+path+(path[path.length-1]!=="/"?"/":"")}else{newCookie+="; path=/"}if(Fit.Validation.IsSet(domain)===true){newCookie+="; domain="+domain}if(sameSite==="None"||sameSite==="Lax"||sameSite==="Strict"){newCookie+="; samesite="+sameSite.toLowerCase()}if(secure===true){newCookie+="; secure"}document.cookie=newCookie};Fit.Cookies.Get=function(name){Fit.Validation.ExpectStringValue(name);var cookieName=name+"=";var cookies=document.cookie.split(";");var cookie=null;for(var i=0;i<cookies.length;i++){cookie=cookies[i];while(cookie.charAt(0)===" ")cookie=cookie.substring(1,cookie.length);if(cookie.indexOf(cookieName)===0)return cookie.substring(cookieName.length,cookie.length).replace(/\\n/g,"\n")}return null};Fit.Cookies.Remove=function(){var name=undefined;var path=undefined;var domain=undefined;if(arguments.length===1&&typeof arguments[0]==="object"){name=arguments[0].Name;path=arguments[0].Path;domain=arguments[0].Domain}else{name=arguments[0];path=arguments[1];domain=arguments[2]}Fit.Validation.ExpectStringValue(name);Fit.Validation.ExpectStringValue(path,true);Fit.Validation.ExpectStringValue(domain,true);Fit.Cookies.Set(name,"",-1,path,domain)};Fit.Data={};Fit.Data.CreateGuid=function(dashFormat){Fit.Validation.ExpectBoolean(dashFormat,true);var chars="0123456789abcdef".split("");var uuid=new Array;var rnd=Math.random;var r=-1;if(dashFormat!==false)uuid[8]="-";if(dashFormat!==false)uuid[13]="-";uuid[14]="4";if(dashFormat!==false)uuid[18]="-";if(dashFormat!==false)uuid[23]="-";var length=32+(dashFormat!==false?4:0);for(var i=0;i<length;i++){if(uuid[i]!==undefined)continue;r=0|rnd()*16;uuid[i]=chars[i===19?r&3|8:r&15]}return uuid.join("")};Fit.Core.Base64ToBlob=function(base64Data,mimeType,async,resolve){Fit.Validation.ExpectStringValue(base64Data);Fit.Validation.ExpectStringValue(mimeType||"unknown");Fit.Validation.ExpectBoolean(async);Fit.Validation.ExpectFunction(resolve);var base64=base64Data;var contentType=mimeType||"";var dataUrlRegEx=/^data:(.+);base64,/;if(dataUrlRegEx.test(base64)===true){contentType=contentType||base64.match(dataUrlRegEx)[1];base64=base64.replace(dataUrlRegEx,"")}contentType=contentType||"application/octet-stream";var createResult=function(success,blob,error){return{Success:success,Blob:blob,Error:error}};if(async===true&&window.fetch){fetch("data:"+contentType+";base64,"+base64).then(function(response){response.blob().then(function(blob){resolve(createResult(true,blob,null))})["catch"](function(rejectReason){resolve(createResult(false,null,"Unable to read blob"))})})["catch"](function(rejectReason){resolve(createResult(false,null,"Unable to fetch blob, possibly due to invalid base64 value"))})}else if(window.atob){var byteCharacters=null;var byteArrays=[];var sliceSize=512;try{byteCharacters=atob(base64)}catch(err){resolve(createResult(false,null,"Invalid base64 value"))}for(var offset=0;offset<byteCharacters.length;offset+=sliceSize){var slice=byteCharacters.slice(offset,offset+sliceSize);var byteNumbers=new Array(slice.length);for(var i=0;i<slice.length;i++){byteNumbers[i]=slice.charCodeAt(i)}var byteArray=new Uint8Array(byteNumbers);byteArrays.push(byteArray)}resolve(createResult(true,new Blob(byteArrays,{type:contentType}),null))}else{resolve(createResult(false,null,"Unsupported browser"))}};Fit.Math={};Fit.Math.MidpointRounding={Up:"Up",Down:"Down",AwayFromZero:"AwayFromZero"};Fit.Math.Round=function(value,precision,midpointRounding){Fit.Validation.ExpectNumber(value);Fit.Validation.ExpectInteger(precision,true);if(Fit.Validation.IsSet(midpointRounding)===true&&Fit.Validation.IsSet(Fit.Math.MidpointRounding[midpointRounding])===false)Fit.Validation.ThrowError("Unsupported MidpointRounding specified - use e.g. Fit.Math.MidpointRounding.Up");var decimals=Fit.Validation.IsSet(precision)===true?precision:0;var mpr=midpointRounding?midpointRounding:Fit.Math.MidpointRounding.AwayFromZero;var factor=1;for(var i=0;i<decimals;i++)factor=factor*10;var res=null;if(mpr===Fit.Math.MidpointRounding.Up){res=Math.round(value*factor)/factor}else if(mpr===Fit.Math.MidpointRounding.AwayFromZero){res=(value<0?-1:1)*Math.round(Math.abs(value*factor))/factor}else{res=-1*Math.round(-1*value*factor)/factor}return res};Fit.Math.Format=function(value,decimals,decimalSeparator){Fit.Validation.ExpectNumber(value);Fit.Validation.ExpectInteger(decimals,true);Fit.Validation.ExpectString(decimalSeparator,true);var res=Fit.Math.Round(value,decimals);if(decimals<=0)return res.toString();var str=res%1===0?res.toString()+".0":res.toString();for(var i=str.split(".")[1].length;i<decimals;i++)str+="0";return Fit.Validation.IsSet(decimalSeparator)===true?str.replace(".",decimalSeparator):str};Fit.Math.Random=function(min,max){Fit.Validation.ExpectInteger(min,true);Fit.Validation.ExpectInteger(max,true);var mn=Fit.Validation.IsSet(min)===true?min:0;var mx=Fit.Validation.IsSet(max)===true?max:9007199254740991;return Math.floor(Math.random()*(mx-mn+1))+mn};Fit.String={};Fit.String.Trim=function(str){Fit.Validation.ExpectString(str);return str.replace(/^\s+|\s+$/g,"")};Fit.String.StripHtml=function(str){Fit.Validation.ExpectString(str);return str.replace(/<\/?[a-zA-Z][^>]*>/g,"")};Fit.String.EncodeHtml=function(str){Fit.Validation.ExpectString(str);return str.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")};Fit.String.DecodeHtml=function(str){Fit.Validation.ExpectString(str);return str.replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&#039;/g,"'").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")};Fit.String.ParseImageBlobUrls=function(str){var imageBlobUrls=[];var blobImages=str.match(/<img .*?src=(["'])blob:.+?\1.*?>/gi)||[];Fit.Array.ForEach(blobImages,function(img){var blobUrl=img.match(/src=(["'])(blob:.*?)\1/i)[2];if(Fit.Array.Contains(imageBlobUrls,blobUrl)===false){Fit.Array.Add(imageBlobUrls,blobUrl)}});return imageBlobUrls};Fit.String.Hash=function(str){Fit.Validation.ExpectString(str);if(str.length==0)return 0;var hash=0;var chr="";for(var i=0;i<str.length;i++){chr=str.charCodeAt(i);hash=(hash<<5)-hash+chr;hash=hash&hash}return hash};Fit.String.UpperCaseFirst=function(str){Fit.Validation.ExpectString(str);if(str==="")return str;return str[0].toUpperCase()+str.slice(1)};Fit.Date={};Fit.Date.Format=function(date,format){Fit.Validation.ExpectDate(date);Fit.Validation.ExpectString(format);format=format.replace(/YYYY/g,date.getFullYear().toString());format=format.replace(/YY/g,date.getFullYear().toString().substring(2));format=format.replace(/Y/g,parseInt(date.getFullYear().toString().substring(2),10).toString());format=format.replace(/MM/g,(date.getMonth()+1<=9?"0":"")+(date.getMonth()+1));format=format.replace(/M/g,(date.getMonth()+1).toString());format=format.replace(/DD/g,(date.getDate()<=9?"0":"")+date.getDate());format=format.replace(/D/g,date.getDate().toString());format=format.replace(/W/g,Fit.Date.GetWeek(date).toString());format=format.replace(/hh/g,(date.getHours()<=9?"0":"")+date.getHours());format=format.replace(/h/g,date.getHours().toString());format=format.replace(/mm/g,(date.getMinutes()<=9?"0":"")+date.getMinutes());format=format.replace(/m/g,date.getMinutes().toString());format=format.replace(/ss/g,(date.getSeconds()<=9?"0":"")+date.getSeconds());format=format.replace(/s/g,date.getSeconds().toString());return format};Fit.Date.Parse=function(strDate,format){Fit.Validation.ExpectString(strDate);Fit.Validation.ExpectString(format);var regEx=format;regEx=regEx.replace(/Y{1,4}/,"\\d{4}");regEx=regEx.replace(/M{1,2}/,"\\d{1,2}");regEx=regEx.replace(/D{1,2}/,"\\d{1,2}");regEx=regEx.replace(/h{1,2}/,"\\d{1,2}");regEx=regEx.replace(/m{1,2}/,"\\d{1,2}");regEx=regEx.replace(/s{1,2}/,"\\d{1,2}");regEx=regEx.replace(/\//g,"\\/");regEx="^"+regEx+"$";var regExp=new RegExp(regEx);if(regExp.test(strDate)===false)throw"InvalidDateFormat - Value '"+strDate+"' does not match format '"+format+"'";var regex=/\d+/g;var match=null;var matches=[];while((match=regex.exec(strDate))!==null){Fit.Array.Add(matches,match[0])}var date=new Date;var parts=[{Name:"Year",Key:"Y",Index:-1,Value:date.getFullYear()},{Name:"Month",Key:"M",Index:-1,Value:date.getMonth()+1},{Name:"Day",Key:"D",Index:-1,Value:date.getDate()},{Name:"Hours",Key:"h",Index:-1,Value:date.getHours()},{Name:"Minutes",Key:"m",Index:-1,Value:date.getMinutes()},{Name:"Seconds",Key:"s",Index:-1,Value:date.getSeconds()}];parts.getVal=function(key){var res=null;Fit.Array.ForEach(this,function(part){if(key===part.Key){res=part.Value;return false}});return res};Fit.Array.ForEach(parts,function(part){part.Index=format.indexOf(part.Key)});parts.sort(function(a,b){return(a.Index!==-1?a.Index:999999)-(b.Index!==-1?b.Index:999999)});var idx=-1;Fit.Array.ForEach(parts,function(part){if(part.Index!==-1){idx++;if(idx>matches.length-1)throw"InvalidDateFormat - "+part.Name+" not found in value";part.Value=parseInt(matches[idx],10);if(part.Key==="Y"&&part.Value<1e3)throw"InvalidDataFormat - value '"+part.Value+"' is not valid for '"+part.Name+"'";if(part.Key==="M"&&(part.Value<0||part.Value>12))throw"InvalidDataFormat - value '"+part.Value+"' is not valid for '"+part.Name+"'";if(part.Key==="D"&&(part.Value<0||part.Value>31))throw"InvalidDataFormat - value '"+part.Value+"' is not valid for '"+part.Name+"'";if(part.Key==="h"&&(part.Value<0||part.Value>23))throw"InvalidDataFormat - value '"+part.Value+"' is not valid for '"+part.Name+"'";if((part.Key==="m"||part.Key==="s")&&(part.Value<0||part.Value>59))throw"InvalidDataFormat - value '"+part.Value+"' is not valid for '"+part.Name+"'";if(part.Key==="M")part.Value=part.Value-1}});var dt=new Date(parts.getVal("Y"),parts.getVal("M"),parts.getVal("D",true),0,0,0);dt.setHours(parseInt(parts.getVal("h"),10));dt.setMinutes(parseInt(parts.getVal("m"),10));dt.setSeconds(parseInt(parts.getVal("s"),10));return dt};Fit.Date.GetWeek=function(date){Fit.Validation.ExpectDate(date);var d=new Date(date.getTime());d.setHours(0,0,0);d.setDate(d.getDate()+4-(d.getDay()||7));var yearStart=new Date(d.getFullYear(),0,1);var week=Math.ceil(((d.getTime()-yearStart.getTime())/(24*60*60*1e3)+1)/7);return week};Fit.Color={};Fit.Color.RgbToHex=function(r,g,b){Fit.Validation.ExpectNumber(r);Fit.Validation.ExpectNumber(g);Fit.Validation.ExpectNumber(b);if(r<0||r>255||g<0||g>255||b<0||b>255)throw"RGB parameters must have a value between 0 and 255";var rHex=r.toString(16);var gHex=g.toString(16);var bHex=b.toString(16);return("#"+(rHex.length===1?"0":"")+rHex+(gHex.length===1?"0":"")+gHex+(bHex.length===1?"0":"")+bHex).toUpperCase()};Fit.Color.HexToRgb=function(hex){Fit.Validation.ExpectString(hex);var rgb=Fit.Color.ParseHex(hex);return"rgb("+rgb.Red+", "+rgb.Green+", "+rgb.Blue+")"};Fit.Color.GetContrastColor=function(hex,threshold){Fit.Validation.ExpectString(hex);Fit.Validation.ExpectInteger(threshold,true);if(/^#?[A-Za-z0-9]{6}$/.test(hex)===false){throw"Invalid HEX color"}hex=hex.replace(/^#/,"");var r=parseInt(hex.substring(0,2),16);var g=parseInt(hex.substring(2,4),16);var b=parseInt(hex.substring(4,6),16);var luminance=.299*r+.587*g+.114*b;return luminance>(threshold||128)?"black":"white"};Fit.Color.ParseHex=function(hex){Fit.Validation.ExpectString(hex);var result=hex.match(/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i);if(result===null)throw"HEX color is in an invalid format";return{Red:parseInt(result[1],16),Green:parseInt(result[2],16),Blue:parseInt(result[3],16)}};Fit.Color.ParseRgb=function(val){Fit.Validation.ExpectString(val);var result=val.match(/(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(\s*,\s*(\d*.*\d+))*/);if(result===null)throw"RGB(A) color is in an invalid format";var c={};c.Red=parseInt(result[1],10);c.Green=parseInt(result[2],10);c.Blue=parseInt(result[3],10);c.Alpha=result[5]!==undefined?parseFloat(result[5]):1;return c};Fit.Color.IsHex=function(val){Fit.Validation.ExpectString(val);try{Fit.Color.ParseHex(val)}catch(err){return false}return true};Fit.Color.IsRgb=function(val){Fit.Validation.ExpectString(val);try{Fit.Color.ParseRgb(val)}catch(err){return false}return true};Fit.Device={HasMouse:true,HasTouch:false,OptimizeForTouch:false};(function(){var pointerQueriesSupported=window.matchMedia&&(window.matchMedia("(any-pointer:coarse)").matches===true||window.matchMedia("(any-pointer:fine)").matches===true);if((navigator.maxTouchPoints||0)>0||"ontouchstart"in window||"TouchEvent"in window&&window.matchMedia&&matchMedia("(any-pointer:coarse)").matches===true){Fit.Device.HasTouch=true}if(pointerQueriesSupported===true&&matchMedia("(any-pointer:fine)").matches===false||pointerQueriesSupported===false&&Fit.Device.HasTouch===true){Fit.Device.HasMouse=false}if(pointerQueriesSupported===true&&matchMedia("(pointer:coarse)").matches===true||pointerQueriesSupported===false&&Fit.Device.HasTouch===true&&Fit.Device.HasMouse===false){Fit.Device.OptimizeForTouch=true}})();Fit.Dom={};Fit._internal.Dom={};Fit.Dom.AddClass=function(elm,cls){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectStringValue(cls);if(Fit.Dom.HasClass(elm,cls)===false)elm.className+=(elm.className!==""?" ":"")+cls};Fit.Dom.RemoveClass=function(elm,cls){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectStringValue(cls);var arr=elm.className.split(" ");var newCls="";Fit.Array.ForEach(arr,function(item){if(item!==cls)newCls+=(newCls!==""?" ":"")+item});elm.className=newCls};Fit.Dom.HasClass=function(elm,cls){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectStringValue(cls);var arr=elm.className.split(" ");var found=false;Fit.Array.ForEach(arr,function(item){if(item===cls){found=true;return false}});return found};Fit.Dom.GetComputedStyle=function(elm,style){return Fit.Browser.GetComputedStyle(elm,style)};Fit.Dom.GetInnerDimensions=function(elm){Fit.Validation.ExpectDomElement(elm);if(elm===document.documentElement){Fit.Validation.ThrowError("Unable to determine inner dimensions for document element (<html>). Maybe you wanted Fit.Dom.GetInnerDimensions(document.body) or Fit.Browser.GetViewPortDimensions().")}var width=elm.offsetWidth;var height=elm.offsetHeight;if(width!==0){width-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"padding-left"));width-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"padding-right"));width-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"border-left-width"));width-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"border-right-width"))}if(height!==0){height-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"padding-top"));height-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"padding-bottom"));height-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"border-top-width"));height-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"border-bottom-width"))}var res={Width:Math.floor(width),Height:Math.floor(height)};res.X=res.Width;res.Y=res.Height;return res};Fit.Dom.GetInnerWidth=function(elm){Fit.Validation.ExpectDomElement(elm);return Fit.Dom.GetInnerDimensions(elm).X};Fit.Dom.IsRooted=function(elm){Fit.Validation.ExpectNode(elm);var parent=elm.parentElement;while(parent!==null){if(parent===document.body)return true;parent=parent.parentElement}return false};Fit.Dom.InsertBefore=function(target,newElm){Fit.Validation.ExpectNode(target);Fit.Validation.ExpectNode(newElm);if(target.parentElement===null)Fit.Validation.ThrowError("Unable to insert element - target is not rooted");target.parentElement.insertBefore(newElm,target)};Fit.Dom.InsertAfter=function(target,newElm){Fit.Validation.ExpectNode(target);Fit.Validation.ExpectNode(newElm);if(target.parentElement===null)Fit.Validation.ThrowError("Unable to insert element - target is not rooted");if(target.nextSibling)target.parentElement.insertBefore(newElm,target.nextSibling);else target.parentElement.appendChild(newElm)};Fit.Dom.InsertAt=function(container,position,newElm){Fit.Validation.ExpectDomElement(container);Fit.Validation.ExpectInteger(position);Fit.Validation.ExpectNode(newElm);if(container.children.length===0||container.children.length-1<position){container.appendChild(newElm)}else{var before=container.children[position];if(before)Fit.Dom.InsertBefore(before,newElm)}};Fit.Dom.Replace=function(oldElm,newElm){Fit.Validation.ExpectNode(oldElm);Fit.Validation.ExpectNode(newElm);if(oldElm.parentElement===null)Fit.Validation.ThrowError("Unable to replace element - not rooted");var container=oldElm.parentElement;container.replaceChild(newElm,oldElm)};Fit.Dom.Add=function(container,elm){Fit.Validation.ExpectDomElement(container);Fit.Validation.ExpectNode(elm);container.appendChild(elm)};Fit.Dom.Remove=function(elm){Fit.Validation.ExpectNode(elm);if(elm.parentElement===undefined){if(elm.parentNode!==null){elm.parentNode.removeChild(elm)}}else if(elm.parentElement!==null){elm.parentElement.removeChild(elm)}};Fit.Dom.Attribute=function(elm,name,value){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectStringValue(name);Fit.Validation.ExpectString(value,true);if(Fit.Validation.IsSet(value)===true)elm.setAttribute(name,value);else if(value===null)elm.removeAttribute(name);return elm.hasAttribute(name)===true?elm.getAttribute(name):null};Fit.Dom.Data=function(elm,name,value){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectStringValue(name);Fit.Validation.ExpectString(value,true);return Fit.Dom.Attribute(elm,"data-"+name,value)};Fit.Dom.CreateElement=function(html,containerTagName){Fit.Validation.ExpectString(html);Fit.Validation.ExpectStringValue(containerTagName,true);if(Fit.String.Trim(html).toLowerCase().indexOf("<tr")===0){html=Fit.String.Trim(html);var container=document.createElement("div");container.innerHTML="<table><tbody>"+html+"</tbody></table>";if(container.firstChild.firstChild.children.length===1)return container.firstChild.firstChild.firstChild;return container.firstChild}else if(Fit.String.Trim(html).toLowerCase().indexOf("<td")===0){html=Fit.String.Trim(html);var container=document.createElement("div");container.innerHTML="<table><tbody><tr>"+html+"</tr></tbody></table>";if(container.firstChild.firstChild.firstChild.children.length===1)return container.firstChild.firstChild.firstChild.firstChild;return container.firstChild.firstChild.firstChild}else{var container=document.createElement(Fit.Validation.IsSet(containerTagName)===true?containerTagName:"div");container.innerHTML=html;if(container.childNodes.length===1)return container.firstChild;return container}};Fit.Dom.Text=function(elm,value){Fit.Validation.ExpectNode(elm);Fit.Validation.ExpectString(value,true);if(Fit.Validation.IsSet(value)===true){if(elm.textContent!==undefined){elm.textContent=value}else if(elm.innerText!==undefined){if(elm.children.length>0){Fit.Array.ForEach(Fit.Array.Copy(elm.children),function(c){Fit.Dom.Remove(c)})}elm.innerText=value}else if(elm.nodeValue!==undefined){elm.nodeValue=value}}return elm.textContent?elm.textContent:elm.innerText};Fit.Dom.GetIndex=function(elm){Fit.Validation.ExpectDomElement(elm);if(!elm.parentElement)return-1;var parent=elm.parentElement;for(var i=0;i<parent.children.length;i++)if(parent.children[i]===elm)return i;return-1};Fit.Dom.GetDepth=function(elm){Fit.Validation.ExpectNode(elm);var i=0;var parent=elm.parentElement;while(parent){i++;parent=parent.parentElement}return i};Fit.Dom.Contained=function(container,elm){Fit.Validation.ExpectDomElement(container);Fit.Validation.ExpectNode(elm);var parent=elm.parentElement;while(parent){if(parent===container)return true;parent=parent.parentElement}return false};Fit.Dom.IsVisible=function(elm){Fit.Validation.ExpectNode(elm);if(elm.nodeType===8)return false;if(elm.nodeType===3){if(elm.parentElement===null)return false;elm=elm.parentElement}if(Fit._internal.Dom.IsOffsetParentSupported()===true&&Fit.Dom.GetComputedStyle(elm,"position")!=="fixed"&&elm!==document.body&&elm!==document.body.parentElement){return elm.offsetParent!==null}var element=elm;var previous=null;while(element!==null){if(Fit.Dom.GetComputedStyle(element,"display")==="none")return false;previous=element;element=element.parentElement}return previous===document.documentElement};Fit.Dom.GetConcealer=function(elm){Fit.Validation.ExpectNode(elm);if(elm.nodeType===8)return elm;if(Fit.Dom.IsVisible(elm)===true)return null;if(elm.nodeType===3)elm=elm.parentElement;var element=elm;while(element!==null){if(Fit.Dom.GetComputedStyle(element,"display")==="none")return element;element=element.parentElement}return null};Fit.Dom.GetFocused=function(){var focused=null;try{focused=document.activeElement;if(!focused.nodeType)focused=document.body}catch(err){focused=document.body}return focused};Fit.Dom.GetParentOfType=function(element,parentType){Fit.Validation.ExpectNode(element);Fit.Validation.ExpectStringValue(parentType);var parent=element.parentElement;while(parent!==null){if(parent.tagName.toLowerCase()===parentType.toLowerCase())return parent;parent=parent.parentElement}return null};Fit.Dom.Wrap=function(elementToWrap,container){Fit.Validation.ExpectNode(elementToWrap);Fit.Validation.ExpectDomElement(container);var parent=elementToWrap.parentElement;var nextSibling=elementToWrap.nextSibling;container.appendChild(elementToWrap);if(parent===null)return;if(nextSibling===null)parent.appendChild(container);else parent.insertBefore(container,nextSibling)};Fit.Dom.SetCaretPosition=function(input,pos){Fit.Validation.ExpectDomElement(input);Fit.Validation.ExpectInteger(pos);if(input.setSelectionRange){input.focus();input.setSelectionRange(pos,pos)}else if(input.createTextRange){var range=input.createTextRange();range.collapse(true);range.moveEnd("character",pos);range.moveStart("character",pos);range.select()}};Fit.Dom.GetBoundingPosition=function(elm){Fit.Validation.ExpectDomElement(elm);if(Fit.Dom.IsVisible(elm)===false)return null;var bcr=elm.getBoundingClientRect();return{X:Math.round(bcr.x||bcr.left),Y:Math.round(bcr.y||bcr.top)}};Fit.Dom.PositionFixedConstrained=function(elm){Fit.Validation.ExpectDomElement(elm);if(Fit.Dom.IsRooted(elm)===false){return true}var d=document.createElement("div");d.style.cssText="position:fixed; top: -10px; left: -10px;";var p=elm.parentElement;p.appendChild(d);var rect=d.getBoundingClientRect();p.removeChild(d);var positionedRelativeToViewport=(rect.x||rect.left)===-10&&(rect.y||rect.top)===-10;var positionFixedConstrained=positionedRelativeToViewport===false;return positionFixedConstrained};Fit.Dom.GetPosition=function(elm,relativeToViewport){return Fit._internal.Dom.GetPosition(elm,relativeToViewport)};Fit._internal.Dom.GetPosition=function(elm,relativeToViewport,internalKeepMargin){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectBoolean(relativeToViewport,true);Fit.Validation.ExpectBoolean(internalKeepMargin,true);if(Fit.Dom.IsVisible(elm)===false)return null;var pos={X:0,Y:0};var rect=elm.getBoundingClientRect();pos.X=rect.left;pos.Y=rect.top;if(internalKeepMargin!==true){pos.X-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"margin-left"));pos.Y-=Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(elm,"margin-top"))}if(relativeToViewport===true){pos.X=Math.round(pos.X);pos.Y=Math.round(pos.Y);return pos}pos.X+=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;pos.Y+=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;pos.X=Math.round(pos.X);pos.Y=Math.round(pos.Y);return pos};Fit.Dom.GetRelativePosition=function(elm){Fit.Validation.ExpectDomElement(elm);if(Fit.Dom.GetComputedStyle(elm,"position")==="fixed"){return Fit.Dom.GetPosition(elm)}if(Fit.Dom.IsVisible(elm)===false)return null;var pos=Fit.Dom.GetPosition(elm);var offsetParent=elm.offsetParent;while(offsetParent!==null&&Fit.Dom.GetComputedStyle(offsetParent,"position")==="static"){offsetParent=offsetParent.offsetParent}offsetParent=offsetParent||document.documentElement;if(offsetParent!==document.documentElement){var offsetParentPos=Fit._internal.Dom.GetPosition(offsetParent,false,true);if(Fit.Browser.GetInfo().Name==="Firefox"&&offsetParent.tagName==="TABLE"||Fit.Browser.GetInfo().Name==="MSIE"&&Fit.Browser.GetInfo().Version>=10&&offsetParent.tagName==="TABLE"||Fit.Browser.GetInfo().Name==="Edge"&&offsetParent.tagName==="TABLE"){pos.X=pos.X-offsetParentPos.X;pos.Y=pos.Y-offsetParentPos.Y}else{pos.X=pos.X-(offsetParentPos.X+Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(offsetParent,"border-left-width")));pos.Y=pos.Y-(offsetParentPos.Y+Fit._internal.Dom.GetPx(Fit.Dom.GetComputedStyle(offsetParent,"border-top-width")))}}return pos};Fit.Dom.GetScrollBars=function(elm){Fit.Validation.ExpectDomElement(elm);if(elm===document.documentElement||elm===document.body){return Fit.Browser.GetScrollBars()}var res={Vertical:{Enabled:false,Size:0},Horizontal:{Enabled:false,Size:0}};if(elm.scrollWidth>elm.clientWidth){res.Horizontal.Enabled=true;res.Horizontal.Size=Fit.Browser.GetScrollBarSize()}if(elm.scrollHeight>elm.clientHeight){res.Vertical.Enabled=true;res.Vertical.Size=Fit.Browser.GetScrollBarSize()}return res};Fit.Dom.GetScrollPosition=function(elm){Fit.Validation.ExpectNode(elm);var pos={X:0,Y:0};if(elm.nodeType!==1)elm=elm.parentElement;while(elm){pos.X+=elm.scrollLeft;pos.Y+=elm.scrollTop;elm=elm.parentElement}pos.X=Math.floor(pos.X);pos.Y=Math.floor(pos.Y);return pos};Fit.Dom.GetScrollParent=function(elm){Fit.Validation.ExpectDomElement(elm);var pos=Fit.Dom.GetComputedStyle(elm,"position");if(pos==="fixed"){return null}var offsetParent=elm.offsetParent;while(elm=elm.parentElement){var regEx=/scroll|auto/;var overflow=Fit.Dom.GetComputedStyle(elm,"overflow");var overflowX=Fit.Dom.GetComputedStyle(elm,"overflow-x");var overflowY=Fit.Dom.GetComputedStyle(elm,"overflow-y");if(regEx.test(overflow)===true||regEx.test(overflowX)===true||regEx.test(overflowY)===true){if(pos==="absolute"&&elm!==offsetParent&&Fit.Dom.Contained(elm,offsetParent)===false){continue}return elm}if(Fit.Dom.GetComputedStyle(elm,"position")==="fixed"){return null}}return Fit.Dom.GetScrollDocument()};Fit.Dom.GetOverflowingParent=function(elm,scrollableOnly){Fit.Validation.ExpectDomElement(elm);var pos=Fit.Dom.GetComputedStyle(elm,"position");if(pos==="fixed"){return null}var regEx=scrollableOnly===true?/scroll|auto/:/scroll|auto|hidden/;var current=elm;while((current=current.parentElement)!==null){var overflow=Fit.Dom.GetComputedStyle(current,"overflow");var overflowX=Fit.Dom.GetComputedStyle(current,"overflow-x");var overflowY=Fit.Dom.GetComputedStyle(current,"overflow-y");if(regEx.test(overflow)===true||regEx.test(overflowX)===true||regEx.test(overflowY)===true){return current}if(Fit.Dom.GetComputedStyle(current,"position")==="fixed"){return null}}return null};Fit.Dom.GetScrollDocument=function(){return Fit.Browser.GetScrollDocument()};Fit._internal.Dom.IsOffsetParentSupported=function(){if(Fit._internal.Dom.OffsetParentSupported===undefined){var parent=document.createElement("div");var child=document.createElement("div");parent.style.display="none";Fit.Dom.Add(document.body,parent);Fit.Dom.Add(parent,child);Fit._internal.Dom.OffsetParentSupported=child.offsetParent===null;Fit.Dom.Remove(parent)}return Fit._internal.Dom.OffsetParentSupported};Fit._internal.Dom.GetPx=function(val){val=val?parseInt(val):0;if(isNaN(val)===true)val=0;return val};Fit.DragDrop={};Fit.DragDrop.Draggable=function(domElm,domTriggerElm){Fit.Validation.ExpectElementNode(domElm);Fit.Validation.ExpectElementNode(domTriggerElm,true);var me=this;var elm=domElm;var posState=null;var trgElm=domTriggerElm?domTriggerElm:null;var bringToFrontOnActivation=false;var returnFocus=false;var onDragStart=null;var onDragging=null;var onDragStop=null;var activationEventId=-1;var mouseDownEventId=-1;function init(){Fit._internal.Core.EnsureStyles();Fit.Dom.AddClass(elm,"FitDragDropDraggable");Fit.Dom.AddClass(trgElm!==null?trgElm:elm,"FitDragDropDraggableHandle");activationEventId=Fit.Events.AddHandler(elm,Fit.Browser.IsTouchEnabled()===true?"touchstart":"mousedown",function(e){if(bringToFrontOnActivation===true){me.BringToFront()}});var focusedBeforeDrag=null;mouseDownEventId=Fit.Events.AddHandler(trgElm!==null?trgElm:elm,Fit.Browser.IsTouchEnabled()===true?"touchstart":"mousedown",function(e){if(Fit.DragDrop.Draggable._internal.active!==null)return;var ev=Fit.Events.GetEvent(e);if(onDragStart){if(onDragStart(elm)===false){return}}focusedBeforeDrag=returnFocus===true?Fit.Dom.GetFocused():null;Fit.Dom.AddClass(elm,"FitDragDropDragging");if(posState===null){posState={position:elm.style.position,left:elm.style.left,top:elm.style.top}}var pp=Fit.Events.GetPointerState().Coordinates.ViewPort;var mouseXviewport=pp.X;var mouseYviewport=pp.Y;var state={Draggable:me,Positioning:"relative",Mouse:{Viewport:{X:-1,Y:-1},Document:{X:-1,Y:-1}},Position:{Viewport:{X:-1,Y:-1},Document:{X:-1,Y:-1},Offset:{X:-1,Y:-1}},Events:{OnDragStart:onDragStart,OnDragging:onDragging,OnDragStop:onDragStop}};var positioning=Fit.Dom.GetComputedStyle(elm,"position");if(positioning==="absolute"||positioning==="fixed"){state.Positioning=positioning}state.Mouse.Viewport.X=mouseXviewport;state.Mouse.Viewport.Y=mouseYviewport;var scrollPos=Fit.Dom.GetScrollPosition(elm);state.Mouse.Document.X=mouseXviewport+scrollPos.X;state.Mouse.Document.Y=mouseYviewport+scrollPos.Y;state.Position.Viewport=Fit.Dom.GetPosition(elm,true);state.Position.Document=Fit.Dom.GetPosition(elm);var offsetX=Fit.Dom.GetComputedStyle(elm,"left");var offsetY=Fit.Dom.GetComputedStyle(elm,"top");state.Position.Offset.X=offsetX.indexOf("px")>-1?parseInt(offsetX):0;state.Position.Offset.Y=offsetY.indexOf("px")>-1?parseInt(offsetY):0;Fit.DragDrop.Draggable._internal.active=state;if(Fit.Dom.HasClass(elm,"FitDragDropDropZone")===true){var draggableDropZone=null;Fit.Array.ForEach(Fit.DragDrop.DropZone._internal.dropzones,function(dzState){if(dzState.DropZone.GetElement()===elm){draggableDropZone=dzState;return false}});Fit.Array.Remove(Fit.DragDrop.DropZone._internal.dropzones,draggableDropZone);Fit.Array.Add(Fit.DragDrop.DropZone._internal.dropzones,draggableDropZone)}if(ev.type==="touchstart"){Fit.Events.PreventDefault(ev)}});if(Fit.DragDrop.Draggable._internal.mouseUpRegistered===false){Fit.DragDrop.Draggable._internal.mouseUpRegistered=true;Fit.Events.AddHandler(document,Fit.Browser.IsTouchEnabled()===true?"touchend":"mouseup",function(e){if(Fit.DragDrop.Draggable._internal.active===null)return;var draggableState=Fit.DragDrop.Draggable._internal.active;var draggable=Fit.DragDrop.Draggable._internal.active.Draggable;var dropzoneState=Fit.DragDrop.DropZone._internal.active;var dropzone=dropzoneState!==null?dropzoneState.DropZone:null;Fit.Dom.RemoveClass(draggable.GetElement(),"FitDragDropDragging");Fit.DragDrop.Draggable._internal.active=null;if(dropzoneState!==null){Fit.Dom.RemoveClass(dropzone.GetElement(),"FitDragDropDropZoneActive");Fit.DragDrop.DropZone._internal.active=null;if(dropzoneState.OnDrop)dropzoneState.OnDrop(dropzone,draggable)}if(focusedBeforeDrag!==null){focusedBeforeDrag.focus();focusedBeforeDrag=null}if(draggableState.Events.OnDragStop)draggableState.Events.OnDragStop(draggable)})}Fit.Browser.IsTouchEnabled()===true&&Fit.Events.AddHandler(document,"touchcancel",function(e){focusedBeforeDrag=null});if(Fit.DragDrop.Draggable._internal.mouseMoveRegistered===false){Fit.DragDrop.Draggable._internal.mouseMoveRegistered=true;Fit.Events.AddHandler(document,Fit.Browser.IsTouchEnabled()===true?"touchmove":"mousemove",{passive:false},function(e){if(Fit.DragDrop.Draggable._internal.active===null)return;var ev=Fit.Events.GetEvent(e);var state=Fit.DragDrop.Draggable._internal.active;var draggable=state.Draggable;var elm=draggable.GetElement();var pp=Fit.Events.GetPointerState().Coordinates.ViewPort;var mouseXviewport=pp.X;var mouseYviewport=pp.Y;var vpDim=Fit.Browser.GetViewPortDimensions();mouseXviewport=mouseXviewport>=0?mouseXviewport:0;mouseXviewport=mouseXviewport<=vpDim.Width?mouseXviewport:vpDim.Width;mouseYviewport=mouseYviewport>=0?mouseYviewport:0;mouseYviewport=mouseYviewport<=vpDim.Height?mouseYviewport:vpDim.Height;var positioning=Fit.DragDrop.Draggable._internal.active.Positioning;var scrollPos=positioning!=="fixed"?Fit.Dom.GetScrollPosition(elm):{X:0,Y:0};var mouseXdocument=mouseXviewport+scrollPos.X;var mouseYdocument=mouseYviewport+scrollPos.Y;if(positioning!=="relative"){var mouseFromLeft=state.Mouse.Viewport.X-state.Position.Viewport.X;var mouseFromTop=state.Mouse.Viewport.Y-state.Position.Viewport.Y;elm.style.position=positioning;elm.style.left=mouseXdocument-mouseFromLeft+"px";elm.style.top=mouseYdocument-mouseFromTop+"px"}else{var mouseXmoved=mouseXdocument-state.Mouse.Document.X;var mouseYmoved=mouseYdocument-state.Mouse.Document.Y;var elementLeft=state.Position.Offset.X;var elementTop=state.Position.Offset.Y;elm.style.position="relative";elm.style.left=elementLeft+mouseXmoved+"px";elm.style.top=elementTop+mouseYmoved+"px"}if(state.Events.OnDragging)state.Events.OnDragging(elm);var dropzone=null;var dropzoneElement=null;var pos=null;var dropZoneX=-1;var dropZoneY=-1;var previouslyActiveDropZone=Fit.DragDrop.DropZone._internal.active;var dropzoneActive=null;Fit.Array.ForEach(Fit.DragDrop.DropZone._internal.dropzones,function(dzState){dropzone=dzState.DropZone;dropzoneElement=dropzone.GetElement();if(Fit.Dom.IsVisible(dropzoneElement)===false)return;pos=Fit.Dom.GetPosition(dropzoneElement,true);dropZoneX=pos.X;dropZoneY=pos.Y;var dropzoneFound=dropzoneActive===null;var dropzoneDeeperThanPreviouslyFound=dropzoneActive===null||Fit.Dom.GetDepth(dropzoneElement)>Fit.Dom.GetDepth(dropzoneActive.DropZone.GetElement());var dropzoneCurrentlyBeingDragged=Fit.Dom.HasClass(dropzoneElement,"FitDragDropDragging")===true;var draggableHoveringDropZone=mouseXviewport>dropZoneX&&mouseXviewport<dropZoneX+dropzoneElement.offsetWidth&&mouseYviewport>dropZoneY&&mouseYviewport<dropZoneY+dropzoneElement.offsetHeight;if((dropzoneFound===false||dropzoneDeeperThanPreviouslyFound===true)&&dropzoneCurrentlyBeingDragged===false&&draggableHoveringDropZone===true){dropzoneActive=dzState}});if(previouslyActiveDropZone!==null&&dropzoneActive!==previouslyActiveDropZone){Fit.Dom.RemoveClass(previouslyActiveDropZone.DropZone.GetElement(),"FitDragDropDropZoneActive");Fit.DragDrop.DropZone._internal.active=null;if(previouslyActiveDropZone.OnLeave)previouslyActiveDropZone.OnLeave(previouslyActiveDropZone.DropZone)}if(dropzoneActive!==null&&dropzoneActive!==previouslyActiveDropZone){Fit.Dom.AddClass(dropzoneActive.DropZone.GetElement(),"FitDragDropDropZoneActive");Fit.DragDrop.DropZone._internal.active=dropzoneActive;if(dropzoneActive.OnEnter)dropzoneActive.OnEnter(dropzoneActive.DropZone)}Fit.Events.PreventDefault(ev)})}}this.BringToFrontOnActivation=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){bringToFrontOnActivation=val}return bringToFrontOnActivation};this.ReturnFocus=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){returnFocus=val}return returnFocus};this.BringToFront=function(){elm.style.zIndex=Fit.DragDrop.Draggable._internal.getNextZindex()};this.Reset=function(){if(posState===null)return;elm.style.position=posState.position;elm.style.left=posState.left;elm.style.top=posState.top;elm.style.zIndex="";posState=null};this.GetDomElement=function(){return elm};this.GetElement=this.GetDomElement;this.Dispose=function(){Fit.Dom.RemoveClass(elm,"FitDragDropDraggable");Fit.Dom.RemoveClass(trgElm!==null?trgElm:elm,"FitDragDropDraggableHandle");Fit.Events.RemoveHandler(elm,activationEventId);Fit.Events.RemoveHandler(trgElm!==null?trgElm:elm,mouseDownEventId);if(Fit.DragDrop.Draggable._internal.active!==null&&Fit.DragDrop.Draggable._internal.active.Draggable===me){Fit.DragDrop.Draggable._internal.active=null}me=elm=posState=trgElm=bringToFrontOnActivation=returnFocus=onDragStart=onDragging=onDragStop=activationEventId=mouseDownEventId=null};this.OnDragStart=function(cb){Fit.Validation.ExpectFunction(cb);onDragStart=cb};this.OnDragging=function(cb){Fit.Validation.ExpectFunction(cb);onDragging=cb};this.OnDragStop=function(cb){Fit.Validation.ExpectFunction(cb);onDragStop=cb};init()};Fit.DragDrop.Draggable._internal={_zIndex:1e4,getNextZindex:function(){Fit.DragDrop.Draggable._internal._zIndex++;return Fit.DragDrop.Draggable._internal._zIndex+(Fit.Dom.Data(document.documentElement,"fitui-companion")==="fluent-ui"?2e6:0)},mouseUpRegistered:false,mouseMoveRegistered:false,active:null};Fit.DragDrop.Draggable.GetNextZindex=function(){return Fit.DragDrop.Draggable._internal.getNextZindex()};Fit.DragDrop.DropZone=function(domElm){Fit.Validation.ExpectElementNode(domElm);var elm=domElm;var cfg={DropZone:this,OnEnter:null,OnDrop:null,OnLeave:null};function init(){Fit._internal.Core.EnsureStyles();Fit.Dom.AddClass(elm,"FitDragDropDropZone");Fit.DragDrop.DropZone._internal.dropzones.push(cfg)}this.Dispose=function(){Fit.Dom.RemoveClass(elm,"FitDragDropDropZone");Fit.Array.Remove(Fit.DragDrop.DropZone._internal.dropzones,cfg);elm=cfg=null};this.GetDomElement=function(){return elm};this.GetElement=this.GetDomElement;this.OnEnter=function(cb){Fit.Validation.ExpectFunction(cb);cfg.OnEnter=cb};this.OnDrop=function(cb){Fit.Validation.ExpectFunction(cb);cfg.OnDrop=cb};this.OnLeave=function(cb){Fit.Validation.ExpectFunction(cb);cfg.OnLeave=cb};init()};Fit.DragDrop.DropZone._internal={dropzones:[],active:null};Fit.Events={};Fit.Events.AddHandler=function(){var element=null;var event=null;var useCaptureOrOptions=false;var eventFunction=null;if(arguments.length===3){element=arguments[0];event=arguments[1];eventFunction=arguments[2]}else if(arguments.length===4){element=arguments[0];event=arguments[1];useCaptureOrOptions=arguments[2];eventFunction=arguments[3]}Fit.Validation.ExpectEventTarget(element);Fit.Validation.ExpectStringValue(event);Fit.Validation.ExpectBoolean(typeof useCaptureOrOptions!=="object"?useCaptureOrOptions:true);Fit.Validation.ExpectBoolean(useCaptureOrOptions&&useCaptureOrOptions.Capture||true);Fit.Validation.ExpectBoolean(useCaptureOrOptions&&useCaptureOrOptions.Once||true);Fit.Validation.ExpectBoolean(useCaptureOrOptions&&useCaptureOrOptions.Passive||true);Fit.Validation.ExpectFunction(eventFunction);if(event.toLowerCase()==="#rooted"){if(useCaptureOrOptions)Fit.Validation.ThrowError("Event capturing or event options not supported for Rooted event");Fit.Array.Add(Fit._internal.Events.OnRootedHandlers,{Element:element,Parent:element.parentElement,Event:event,Callback:eventFunction})}else if(element.addEventListener){var options=false;if(useCaptureOrOptions===true){options=true}else if(useCaptureOrOptions){options={};if(useCaptureOrOptions.Capture!==undefined){options.capture=useCaptureOrOptions.Capture}if(useCaptureOrOptions.Once!==undefined){options.once=useCaptureOrOptions.Once}if(useCaptureOrOptions.Passive!==undefined){options.passive=useCaptureOrOptions.Passive}}element.addEventListener(event,eventFunction,options)}else if(element.attachEvent){if(event.toLowerCase()==="domcontentloaded"&&Fit._internal.Events.Browser.Name==="MSIE"&&Fit._internal.Events.Browser.Version===8){element.attachEvent("onreadystatechange",function(e){if(element.readyState==="complete"){eventFunction(e)}})}else{element.attachEvent("on"+event,eventFunction)}}element._internal=element._internal||{};element._internal.Events=element._internal.Events||{Handlers:[]};var eventId=element._internal.Events.Handlers.length;Fit.Array.Add(element._internal.Events.Handlers,{Event:event,Handler:eventFunction,UseCaptureOrOptions:useCaptureOrOptions,Id:eventId});if(event.toLowerCase()==="load"&&element.nodeType===9&&element.readyState==="complete"){eventFunction()}else if(event.toLowerCase()==="load"&&(typeof element.contentDocument==="object"&&element.contentDocument!==null)&&element.src&&element.contentDocument.readyState==="complete"){eventFunction()}else if(event.toLowerCase()==="load"&&element===window&&Fit._internal.Events.OnReadyFired===true){eventFunction()}return eventId};Fit.Events.RemoveHandler=function(){var element=null;var event=null;var useCaptureOrOptions=false;var eventFunction=null;if(arguments.length===2){Fit.Validation.ExpectEventTarget(arguments[0]);Fit.Validation.ExpectInteger(arguments[1]);element=arguments[0];var handler=element._internal&&element._internal.Events&&element._internal.Events.Handlers?element._internal.Events.Handlers[arguments[1]]:undefined;if(handler===undefined)return;if(handler===null)return;event=handler.Event;eventFunction=handler.Handler;useCaptureOrOptions=handler.UseCaptureOrOptions}else if(arguments.length===3){element=arguments[0];event=arguments[1];eventFunction=arguments[2]}else if(arguments.length===4){element=arguments[0];event=arguments[1];useCaptureOrOptions=arguments[2];eventFunction=arguments[3]}Fit.Validation.ExpectEventTarget(element);Fit.Validation.ExpectStringValue(event);Fit.Validation.ExpectBoolean(typeof useCaptureOrOptions!=="object"?useCaptureOrOptions:true);Fit.Validation.ExpectBoolean(useCaptureOrOptions&&useCaptureOrOptions.Capture||true);Fit.Validation.ExpectBoolean(useCaptureOrOptions&&useCaptureOrOptions.Once||true);Fit.Validation.ExpectBoolean(useCaptureOrOptions&&useCaptureOrOptions.Passive||true);Fit.Validation.ExpectFunction(eventFunction);if(event.toLowerCase()==="#rooted"){var handlers=Fit._internal.Events.OnRootedHandlers;Fit.Array.ForEach(handlers,function(handler){if(element===handler.Element&&event.toLowerCase()===handler.Event.toLowerCase()&&eventFunction===handler.Callback&&useCaptureOrOptions===false){handler.Removed=true;return false}})}else if(element.removeEventListener){var options=false;if(useCaptureOrOptions===true){options=true}else if(useCaptureOrOptions){options={};if(useCaptureOrOptions.Capture!==undefined){options.capture=useCaptureOrOptions.Capture}if(useCaptureOrOptions.Once!==undefined){options.once=useCaptureOrOptions.Once}if(useCaptureOrOptions.Passive!==undefined){options.passive=useCaptureOrOptions.Passive}}element.removeEventListener(event,eventFunction,options)}else if(element.detachEvent){element.detachEvent("on"+event,eventFunction)}if(element._internal){if(element._internal.Events){if(arguments.length===2){element._internal.Events.Handlers[arguments[1]]=null}else{for(var i=0;i<element._internal.Events.Handlers.length;i++){var handler=element._internal.Events.Handlers[i];if(handler!==null&&event.toLowerCase()===handler.Event.toLowerCase()&&eventFunction===handler.Handler&&Fit.Core.IsEqual(useCaptureOrOptions,handler.UseCaptureOrOptions)===true){element._internal.Events.Handlers[i]=null;break}}}}}};Fit.Events.PreventDefault=function(e){Fit.Validation.ExpectEvent(e,true);var ev=e||window.event;if((ev.type==="click"||ev.type==="mousedown"||ev.type==="mouseup")&&ev.button===2){var preventContextMenu=Fit.Events.PreventDefault;Fit.Events.AddHandler(document,"contextmenu",true,preventContextMenu);Fit.Events.AddHandler(document,"contextmenu",preventContextMenu);setTimeout(function(){Fit.Events.RemoveHandler(document,"contextmenu",true,preventContextMenu);Fit.Events.RemoveHandler(document,"contextmenu",preventContextMenu)},0)}if(ev.preventDefault)ev.preventDefault();ev.returnValue=false;return false};Fit.Events.StopPropagation=function(e){Fit.Validation.ExpectEvent(e,true);var ev=e||window.event;if(ev.stopPropagation)ev.stopPropagation();ev.cancelBubble=true;return false};Fit.Events.Stop=function(e){Fit.Events.PreventDefault(e);Fit.Events.StopPropagation(e);return false};Fit.Events.GetTarget=function(e){Fit.Validation.ExpectEvent(e,true);var ev=e||window.event;var target=ev.srcElement||ev.target;return target?target:null};Fit.Events.GetRelatedTarget=function(e){Fit.Validation.ExpectEvent(e,true);var ev=e||window.event;return ev.relatedTarget||null};Fit.Events.GetEvent=function(e){Fit.Validation.ExpectEvent(e,true);return e||window.event};Fit.Events.GetModifierKeys=function(){if(window.event&&(window.event.type==="keypress"||window.event.type==="keydown"||window.event.type==="keyup")){Fit._internal.Events.KeysDown.Shift=window.event.shiftKey===true;Fit._internal.Events.KeysDown.Ctrl=window.event.ctrlKey===true;Fit._internal.Events.KeysDown.Alt=window.event.altKey===true;Fit._internal.Events.KeysDown.Meta=window.event.metaKey===true;Fit._internal.Events.KeysDown.KeyUp=window.event.type==="keyup"?window.event.keyCode:-1;Fit._internal.Events.KeysDown.KeyDown=window.event.type==="keypress"||window.event.type==="keydown"?window.event.keyCode:-1}return Fit.Core.Clone(Fit._internal.Events.KeysDown)};Fit.Events.GetPointerState=function(){if(window.event&&(window.event.type==="click"||window.event.type==="mousedown"||window.event.type==="mouseup")){if(Fit._internal.Events.Browser.Name==="MSIE"&&Fit._internal.Events.Browser.Version===8&&window.event.button===1||window.event.button===0){Fit._internal.Events.Mouse.Buttons.Primary=true;Fit._internal.Events.Mouse.Buttons.Secondary=false}else if(window.event.button===2){Fit._internal.Events.Mouse.Buttons.Secondary=true;Fit._internal.Events.Mouse.Buttons.Primary=false}}var target=Fit._internal.Events.Mouse.Target;Fit._internal.Events.Mouse.Target=null;var obj=Fit.Core.Clone(Fit._internal.Events.Mouse);obj.Target=target;Fit._internal.Events.Mouse.Target=target;return obj};Fit._internal.Events={};Fit._internal.Events.Browser=Fit.Browser.GetInfo();Fit._internal.Events.KeysDown={Shift:false,Ctrl:false,Alt:false,Meta:false,KeyDown:-1,KeyUp:-1};Fit._internal.Events.Mouse={Buttons:{Primary:false,Secondary:false,Touch:false},Coordinates:{ViewPort:{X:-1,Y:-1},Document:{X:-1,Y:-1}},Target:null};Fit._internal.Events.OnReadyHandlers=[];Fit._internal.Events.OnDomReadyHandlers=[];Fit._internal.Events.OnRootedHandlers=[];setInterval(function(){var remove=[];Fit.Array.ForEach(Fit._internal.Events.OnRootedHandlers,function(handler){if(handler.Removed===true||handler.Element._internal===undefined){Fit.Array.Add(remove,handler);return}if(Fit.Dom.IsRooted(handler.Element)===true&&handler.Parent!==handler.Element.parentElement){handler.Parent=handler.Element.parentElement;handler.Callback(handler.Element)}});Fit.Array.ForEach(remove,function(handler){Fit.Array.Remove(Fit._internal.Events.OnRootedHandlers,handler)})},100);Fit.Events.AddHandler(document,"keydown",true,function(e){var ev=Fit.Events.GetEvent(e);Fit._internal.Events.KeysDown.Shift=ev.shiftKey===true;Fit._internal.Events.KeysDown.Ctrl=ev.ctrlKey===true;Fit._internal.Events.KeysDown.Alt=ev.altKey===true;Fit._internal.Events.KeysDown.Meta=ev.metaKey===true;Fit._internal.Events.KeysDown.KeyUp=-1;Fit._internal.Events.KeysDown.KeyDown=ev.keyCode});Fit.Events.AddHandler(document,"keyup",true,function(e){var ev=Fit.Events.GetEvent(e);Fit._internal.Events.KeysDown.Shift=ev.shiftKey===true;Fit._internal.Events.KeysDown.Ctrl=ev.ctrlKey===true;Fit._internal.Events.KeysDown.Alt=ev.altKey===true;Fit._internal.Events.KeysDown.Meta=ev.metaKey===true;Fit._internal.Events.KeysDown.KeyUp=ev.keyCode;Fit._internal.Events.KeysDown.KeyDown=-1});Fit.Events.AddHandler(document,"mousedown",true,function(e){var ev=Fit.Events.GetEvent(e);if(Fit._internal.Events.Browser.Name==="MSIE"&&Fit._internal.Events.Browser.Version===8&&ev.button===1||ev.button===0){Fit._internal.Events.Mouse.Buttons.Primary=true;Fit._internal.Events.Mouse.Buttons.Secondary=false}else if(ev.button===2){Fit._internal.Events.Mouse.Buttons.Secondary=true;Fit._internal.Events.Mouse.Buttons.Primary=false}Fit._internal.Events.Mouse.Target=Fit.Events.GetTarget(ev)});Fit.Events.AddHandler(document,"mouseup",true,function(e){setTimeout(function(){Fit._internal.Events.Mouse.Buttons.Primary=false;Fit._internal.Events.Mouse.Buttons.Secondary=false;Fit._internal.Events.Mouse.Target=null},0)});Fit.Events.AddHandler(document,"mouseout",true,function(e){Fit._internal.Events.Mouse.Buttons.Primary=false;Fit._internal.Events.Mouse.Buttons.Secondary=false;Fit._internal.Events.Mouse.Target=null});Fit.Events.AddHandler(document,"mousemove",function(e){var ev=Fit.Events.GetEvent(e);if(document.body===null)return;Fit._internal.Events.Mouse.Coordinates.ViewPort.X=Math.floor(ev.clientX);Fit._internal.Events.Mouse.Coordinates.ViewPort.Y=Math.floor(ev.clientY);var scrollPos=Fit.Dom.GetScrollPosition(document.body);Fit._internal.Events.Mouse.Coordinates.Document.X=Fit._internal.Events.Mouse.Coordinates.ViewPort.X+scrollPos.X;Fit._internal.Events.Mouse.Coordinates.Document.Y=Fit._internal.Events.Mouse.Coordinates.ViewPort.Y+scrollPos.Y});Fit.Events.AddHandler(document,"touchstart",true,function(e){var ev=Fit.Events.GetEvent(e);Fit._internal.Events.Mouse.Buttons.Touch=true;Fit._internal.Events.Mouse.Coordinates.ViewPort.X=Math.floor(ev.touches[0].clientX);Fit._internal.Events.Mouse.Coordinates.ViewPort.Y=Math.floor(ev.touches[0].clientY);var scrollPos=Fit.Dom.GetScrollPosition(document.body);Fit._internal.Events.Mouse.Coordinates.Document.X=Fit._internal.Events.Mouse.Coordinates.ViewPort.X+scrollPos.X;Fit._internal.Events.Mouse.Coordinates.Document.Y=Fit._internal.Events.Mouse.Coordinates.ViewPort.Y+scrollPos.Y;Fit._internal.Events.Mouse.Target=Fit.Events.GetTarget(ev)});Fit.Events.AddHandler(document,"touchend",true,function(e){var ev=Fit.Events.GetEvent(e);setTimeout(function(){Fit._internal.Events.Mouse.Buttons.Touch=false;Fit._internal.Events.Mouse.Target=null},0)});Fit.Events.AddHandler(document,"touchcancel",true,function(e){var ev=Fit.Events.GetEvent(e);setTimeout(function(){Fit._internal.Events.Mouse.Buttons.Touch=false;Fit._internal.Events.Mouse.Target=null},0)});Fit.Events.AddHandler(document,"touchmove",function(e){var ev=Fit.Events.GetEvent(e);Fit._internal.Events.Mouse.Coordinates.ViewPort.X=Math.floor(ev.touches[0].clientX);Fit._internal.Events.Mouse.Coordinates.ViewPort.Y=Math.floor(ev.touches[0].clientY);var scrollPos=Fit.Dom.GetScrollPosition(document.body);Fit._internal.Events.Mouse.Coordinates.Document.X=Fit._internal.Events.Mouse.Coordinates.ViewPort.X+scrollPos.X;Fit._internal.Events.Mouse.Coordinates.Document.Y=Fit._internal.Events.Mouse.Coordinates.ViewPort.Y+scrollPos.Y});Fit._internal.Events.MutationObservers=[];Fit._internal.Events.MutationObserverIds=-1;Fit._internal.Events.MutationObserverIntervalId=-1;Fit._internal.Events.MutationCheckExecuting=false;Fit._internal.Events.MutationRegisterPostponed=[];Fit.Events.AddMutationObserver=function(elm,obs,deep){Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectFunction(obs);Fit.Validation.ExpectBoolean(deep,true);if(Fit._internal.Events.MutationCheckExecuting===true){Fit.Array.Add(Fit._internal.Events.MutationRegisterPostponed,{Task:"Add",Element:elm,Observer:obs,Deep:deep===true});return}if(Fit._internal.Events.MutationObservers.length===0){Fit.Events.AddHandler(document,"click",Fit._internal.Events.CheckMutations);Fit.Events.AddHandler(document,"mousedown",Fit._internal.Events.CheckMutations);Fit.Events.AddHandler(document,"mouseup",Fit._internal.Events.CheckMutations);Fit.Events.AddHandler(document,"keypress",Fit._internal.Events.CheckMutations);Fit.Events.AddHandler(document,"keyup",Fit._internal.Events.CheckMutations);Fit.Events.AddHandler(document,"touchstart",Fit._internal.Events.CheckMutations);Fit.Events.AddHandler(document,"touchend",Fit._internal.Events.CheckMutations);Fit.Events.AddHandler(document,"touchcancel",Fit._internal.Events.CheckMutations);var checkInterval=Fit._internal.Events.Browser.Name!=="MSIE"?500:1e3;Fit._internal.Events.MutationObserverIntervalId=setInterval(Fit._internal.Events.CheckMutations,checkInterval)}var hashCode=0;var dimensions=elm.offsetWidth+"x"+elm.offsetHeight;if(deep===true){hashCode=Fit.String.Hash(elm.outerHTML+dimensions)}else{var clone=elm.cloneNode(false);hashCode=Fit.String.Hash(clone.outerHTML+dimensions)}Fit._internal.Events.MutationObserverIds++;Fit.Array.Add(Fit._internal.Events.MutationObservers,{Element:elm,Observer:obs,Hash:hashCode,Deep:deep===true,Id:Fit._internal.Events.MutationObserverIds});return Fit._internal.Events.MutationObserverIds};Fit.Events.RemoveMutationObserver=function(){var elm,obs,deep,id=undefined;if(arguments.length>1){elm=arguments[0];obs=arguments[1];deep=arguments[2];Fit.Validation.ExpectDomElement(elm);Fit.Validation.ExpectFunction(obs);Fit.Validation.ExpectBoolean(deep,true)}else{id=arguments[0];Fit.Validation.ExpectInteger(id)}if(Fit._internal.Events.MutationCheckExecuting===true){if(Fit.Validation.IsSet(id)===true){Fit.Array.Add(Fit._internal.Events.MutationRegisterPostponed,{Task:"Remove",Id:id})}else{Fit.Array.Add(Fit._internal.Events.MutationRegisterPostponed,{Task:"Remove",Element:elm,Observer:obs,Deep:deep===true})}return}var found=null;Fit.Array.ForEach(Fit._internal.Events.MutationObservers,function(mo){if(Fit.Validation.IsSet(id)===true&&mo.Id===id||mo.Element===elm&&mo.Observer===obs&&mo.Deep===(Fit.Validation.IsSet(deep)===true?deep:false)){found=mo;return false}});if(found!==null)Fit.Array.Remove(Fit._internal.Events.MutationObservers,found);if(Fit._internal.Events.MutationObservers.length===0){Fit.Events.RemoveHandler(document,"click",Fit._internal.Events.CheckMutations);Fit.Events.RemoveHandler(document,"mousedown",Fit._internal.Events.CheckMutations);Fit.Events.RemoveHandler(document,"mouseup",Fit._internal.Events.CheckMutations);Fit.Events.RemoveHandler(document,"keypress",Fit._internal.Events.CheckMutations);Fit.Events.RemoveHandler(document,"keyup",Fit._internal.Events.CheckMutations);Fit.Events.RemoveHandler(document,"touchstart",Fit._internal.Events.CheckMutations);Fit.Events.RemoveHandler(document,"touchend",Fit._internal.Events.CheckMutations);Fit.Events.RemoveHandler(document,"touchcancel",Fit._internal.Events.CheckMutations);clearInterval(Fit._internal.Events.MutationObserverIntervalId)}};Fit._internal.Events.CheckMutations=function(){Fit._internal.Events.MutationCheckExecuting=true;var toRemove=[];Fit.Array.ForEach(Fit._internal.Events.MutationObservers,function(mo){var skipRemovedObserver=false;Fit.Array.ForEach(Fit._internal.Events.MutationRegisterPostponed,function(mop){if(mop.Task==="Add"){return}if(Fit.Validation.IsSet(mop.Id)===true&&mop.Id===mo.Id||mop.Element===mo.Element&&mop.Observer===mo.Observer&&mo.Deep===(Fit.Validation.IsSet(mo.Deep)===true?mo.Deep:false)){skipRemovedObserver=true;return false}});if(skipRemovedObserver===true){return}var newHash=0;var dimensions=mo.Element.offsetWidth+"x"+mo.Element.offsetHeight;if(mo.Deep===true){newHash=Fit.String.Hash(mo.Element.outerHTML+dimensions)}else{var clone=mo.Element.cloneNode(false);newHash=Fit.String.Hash(clone.outerHTML+dimensions)}if(mo.Hash!==newHash){mo.Hash=newHash;var orgDisconnect=window.disconnect;window.disconnect=function(){Fit.Array.Add(toRemove,mo)};var error=null;try{mo.Observer(mo.Element)}catch(err){error=err}if(orgDisconnect){window.disconnect=orgDisconnect}else{try{delete window.disconnect}catch(err){window.disconnect=undefined}}if(error!==null)Fit.Validation.ThrowError(error)}});Fit.Array.ForEach(toRemove,function(mo){Fit.Events.RemoveMutationObserver(mo.Element,mo.Observer,mo.Deep)});Fit._internal.Events.MutationCheckExecuting=false;Fit.Array.ForEach(Fit._internal.Events.MutationRegisterPostponed,function(mo){if(mo.Task==="Add"){Fit.Events.AddMutationObserver(mo.Element,mo.Observer,mo.Deep)}else{if(Fit.Validation.IsSet(mo.Id)===true){Fit.Events.RemoveMutationObserver(mo.Id)}else{Fit.Events.RemoveMutationObserver(mo.Element,mo.Observer,mo.Deep)}}});Fit._internal.Events.MutationRegisterPostponed=[]};Fit.Events.OnReady=function(callback){Fit.Validation.ExpectFunction(callback);if(Fit._internal.Events.OnReadyFired===true){callback()}else{Fit._internal.Events.OnReadyHandlers.push(callback)}};Fit.Events.AddHandler(window,"load",function(){Fit._internal.Events.OnReadyFired=true;Fit.Array.ForEach(Fit._internal.Events.OnReadyHandlers,function(handler){handler()});Fit.Array.Clear(Fit._internal.Events.OnReadyHandlers)});Fit.Events.OnDomReady=function(callback){Fit.Validation.ExpectFunction(callback);if(Fit._internal.Events.OnDomReadyFired===true){callback()}else{Fit._internal.Events.OnDomReadyHandlers.push(callback)}};Fit.Events.AddHandler(document,"DOMContentLoaded",function(){Fit._internal.Events.OnDomReadyFired=true;Fit.Array.ForEach(Fit._internal.Events.OnDomReadyHandlers,function(handler){handler()});Fit.Array.Clear(Fit._internal.Events.OnDomReadyHandlers)});Fit.Http={};Fit._internal.Http={};Fit._internal.Http.JsonpRequest={};Fit._internal.Http.JsonpRequest.Callbacks={};Fit.Http.Request=function(uri){Fit.Validation.ExpectStringValue(uri);var me=this;var url=uri;var async=-1;var httpRequest=getHttpRequestObject();var customHeaders={};var customProperties={};var formData=null;var data=null;var method=null;var onStateChange=[];var onRequestHandlers=[];var onSuccessHandlers=[];var onFailureHandlers=[];var onAbortHandlers=[];function init(){httpRequest.onreadystatechange=function(){me._internal.FireOnStateChange();if(httpRequest.readyState===4){if(httpRequest.status===0){me._internal.FireOnAbort()}else if(httpRequest.status>=200&&httpRequest.status<=299){me._internal.FireOnSuccess()}else{me._internal.FireOnFailure()}}};me.AddHeader("X-Requested-With","XMLHttpRequest")}this.AddHeader=function(key,value){Fit.Validation.ExpectStringValue(key);Fit.Validation.ExpectString(value);customHeaders[key.toLowerCase()]={Key:key,Value:value}};this.GetHeader=function(key){Fit.Validation.ExpectString(key);return Fit.Validation.IsSet(customHeaders[key.toLowerCase()])===true?customHeaders[key.toLowerCase()].Value:null};this.RemoveHeader=function(key){Fit.Validation.ExpectString(key);delete customHeaders[key.toLowerCase()]};this.GetHeaders=function(){var keys=[];Fit.Array.ForEach(customHeaders,function(key){Fit.Array.Add(keys,customHeaders[key].Key)});return keys};this.ClearHeaders=function(){customHeaders={}};this.SetData=function(dataObj){me.ClearFormData();data=null;if(typeof dataObj==="string"&&(me.GetHeader("content-type")===null||me.GetHeader("content-type").toLowerCase()==="application/x-www-form-urlencoded")){Fit.Browser.Log("Deprecated use of SetData(..) to set form data on instance of Fit.Http.Request - please use AddFormData(..) instead! If data added is not to be considered form data then make sure to set Content-Type header prior to calling SetData(..)!");formData={};ensureContentTypeHeaderForFormData();var coll=parseKeyValuePairs(dataObj);Fit.Array.ForEach(coll,function(key){formData[key]={Value:coll[key],Encode:true}})}else{data=dataObj}};this.GetData=function(){if(formData!==null){return getFormDataString(false)}return data};this.AddFormData=function(key,value,uriEncode){Fit.Validation.ExpectStringValue(key);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(uriEncode,true);if(formData===null){formData={};ensureContentTypeHeaderForFormData()}formData[key]={Value:value,Encode:uriEncode!==false}};this.AddData=function(key,value,uriEncode){Fit.Validation.ExpectStringValue(key);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(uriEncode,true);Fit.Browser.Log("Use of deprecated AddData(..) function to set form data on instance of Fit.Http.Request - please use AddFormData(..) instead!");me.AddFormData(key,value,uriEncode)};this.GetFormData=function(key){Fit.Validation.ExpectString(key);return formData!==null&&Fit.Validation.IsSet(formData[key])===true?formData[key].Value:null};this.RemoveFormData=function(key){Fit.Validation.ExpectString(key);if(formData!==null)delete formData[key]};this.ClearFormData=function(){formData=null;if(me.GetHeader("content-type")!==null&&customHeaders["content-type"]._ensured===true)me.RemoveHeader("content-type")};this.Method=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){method=val}return method!==null?method:data!==null||formData!==null?"POST":"GET"};this.Async=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){async=val===true?1:0}if(async!==-1)return async===1;return onStateChange.length>0||onSuccessHandlers.length>0||onFailureHandlers.length>0};this.Url=function(val){Fit.Validation.ExpectStringValue(val,true);if(Fit.Validation.IsSet(val)===true){url=val}return url};this.Start=function(){if(formData!==null&&data!==null){Fit.Validation.ThrowError("Unable to send both (JSON) Data and Form Data simultaneously - specify only one type of data to send")}var cancel=me._internal.FireOnRequest();if(cancel===true)return;var httpMethod=me.Method();var async=me.Async();httpRequest.open(httpMethod,url,async);for(var header in customHeaders){httpRequest.setRequestHeader(header,customHeaders[header].Value)}Fit.Array.ForEach(customProperties,function(key){httpRequest[key]=customProperties[key]});var checkerId=-1;checkerId=setInterval(function(){if(me.GetCurrentState()===4){clearInterval(checkerId);if(me.GetHttpStatus()===0){me._internal.FireOnFailure()}}},1e3);try{if(formData!==null)httpRequest.send(getFormDataString(true));else httpRequest.send(data!==null?typeof data==="string"?data:JSON.stringify(data):"")}catch(err){me._internal.FireOnFailure()}};this.Abort=function(){httpRequest.abort()};this.GetResponseXml=function(){return httpRequest.responseXML};this.GetResponseText=function(){return httpRequest.responseText};this.GetResponseJson=function(){return httpRequest.responseText!==""?JSON.parse(httpRequest.responseText):null};this.GetResponse=function(){return(!httpRequest.responseType||httpRequest.responseType==="text")&&typeof httpRequest.responseText==="string"?httpRequest.responseText:httpRequest.response};this.GetCurrentState=function(){return httpRequest.readyState};this.GetHttpStatus=function(){return httpRequest.status};this.GetResponseHeaders=function(){var headers=[];if(httpRequest.getAllResponseHeaders()==="")return headers;Fit.Array.ForEach(Fit.String.Trim(httpRequest.getAllResponseHeaders()).split("\n"),function(h){var info=h.split(":");Fit.Array.Add(headers,{Key:Fit.String.Trim(info[0]),Value:Fit.String.Trim(info[1])})});return headers};this.GetResponseHeader=function(key){Fit.Validation.ExpectString(key);var headerValue=httpRequest.getResponseHeader(key);if(headerValue===""&&Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()<10){var found=false;Fit.Array.ForEach(me.GetResponseHeaders(),function(header){if(header.Key.toLowerCase()===key.toLowerCase()){found=true;return false}});headerValue=found===true?headerValue:null}return headerValue};this.OnStateChange=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onStateChange,func)};this.SetStateListener=this.OnStateChange;this.OnRequest=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onRequestHandlers,func)};this.OnSuccess=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onSuccessHandlers,func)};this.OnFailure=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onFailureHandlers,func)};this.OnAbort=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onAbortHandlers,func)};this.RequestProperties=function(propertyObject){Fit.Validation.ExpectObject(propertyObject,true);if(Fit.Validation.IsSet(propertyObject)===true){customProperties=propertyObject}return customProperties};this._internal={FireOnStateChange:function(){Fit.Array.ForEach(onStateChange,function(handler){handler(me)})},FireOnSuccess:function(){Fit.Array.ForEach(onSuccessHandlers,function(handler){handler(me)})},FireOnFailure:function(){Fit.Array.ForEach(onFailureHandlers,function(handler){handler(me)})},FireOnAbort:function(){Fit.Array.ForEach(onAbortHandlers,function(handler){handler(me)})},FireOnRequest:function(){var cancel=false;Fit.Array.ForEach(onRequestHandlers,function(handler){if(handler(me)===false)cancel=true});return cancel}};function getHttpRequestObject(){if(window.XMLHttpRequest)return new XMLHttpRequest;else if(window.ActiveXObject)return new ActiveXObject("Microsoft.XMLHTTP");throw new Error("Http Request object not supported")}function parseKeyValuePairs(formDataStr){Fit.Validation.ExpectString(formDataStr);if(formDataStr==="")return{};var obj={};var entries=formDataStr.split("&");Fit.Array.ForEach(entries,function(entry){var kv=entry.split("=");obj[kv[0]]=kv.length>1?kv[1]:""});return obj}function getFormDataString(encode){Fit.Validation.ExpectBoolean(encode);var formDataStr="";Fit.Array.ForEach(formData!==null?formData:{},function(key){formDataStr+=(formDataStr!==""?"&":"")+key+"="+(encode===true&&formData[key].Encode===true?encodeURIComponent(formData[key].Value):formData[key].Value)});return formDataStr}function ensureContentTypeHeaderForFormData(){if(me.GetHeader("content-type")===null){me.AddHeader("content-type","application/x-www-form-urlencoded");customHeaders["content-type"]._ensured=true}}init()};Fit.Http.JsonRequest=function(url){Fit.Validation.ExpectStringValue(url);Fit.Core.Extend(this,Fit.Http.Request).Apply(url);var me=this;function init(){me.AddHeader("Content-Type","application/json; charset=UTF-8")}this.AddFormData=function(key,value,uriEncode){Fit.Validation.ThrowError("Use SetData(..) to set JSON request data for JSON WebService")};this.GetResponseJson=Fit.Core.CreateOverride(this.GetResponseJson,function(){var resp=base();if(url.toLowerCase().indexOf(".asmx/")!==-1&&resp&&resp.d)resp=resp.d;return resp});init()};Fit.Http.JsonpRequest=function(uri,jsonpCallbackName){Fit.Validation.ExpectStringValue(uri);Fit.Validation.ExpectStringValue(jsonpCallbackName,true);var me=this;var url=uri;var cbKey=Fit.Validation.IsSet(jsonpCallbackName)===true?jsonpCallbackName:"callback";var cbId=null;var data={};var timeout=3e4;var timer=-1;var response=null;var aborted=false;var onRequestHandlers=[];var onSuccessHandlers=[];var onTimeoutHandlers=[];this.Url=function(val){Fit.Validation.ExpectStringValue(val,true);if(Fit.Validation.IsSet(val)===true){url=val}return url};this.Callback=function(val){Fit.Validation.ExpectStringValue(val,true);if(Fit.Validation.IsSet(val)===true){cbKey=val}return cbKey};this.Timeout=function(val){Fit.Validation.ExpectInteger(val,true);if(Fit.Validation.IsSet(val)===true){timeout=val}return timeout};this.Abort=function(){aborted=true};this.SetParameter=function(key,value,uriEncode){Fit.Validation.ExpectStringValue(key);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(uriEncode,true);data[key]=uriEncode===false?value:encodeURIComponent(value).replace(/%20/g,"+")};this.GetParameter=function(key){Fit.Validation.ExpectString(key);var val=data[key];return val!==undefined?val:null};this.GetParameters=function(){var keys=[];Fit.Array.ForEach(data,function(key){Fit.Array.Add(keys,key)});return keys};this.Start=function(){aborted=false;if(fireEvent(onRequestHandlers)===false)return;response=null;if(timer!==-1){clearTimeout(timer);timer=-1;Fit._internal.Http.JsonpRequest.Callbacks[cbId]=function(response){}}cbId="CB"+Fit.Data.CreateGuid(false);Fit._internal.Http.JsonpRequest.Callbacks[cbId]=function(resp){clearTimeout(timer);timer=-1;response=resp;delete Fit._internal.Http.JsonpRequest.Callbacks[cbId];if(aborted===false){fireEvent(onSuccessHandlers)}};timer=setTimeout(function(){timer=-1;Fit._internal.Http.JsonpRequest.Callbacks[cbId]=function(response){};if(aborted===false){fireEvent(onTimeoutHandlers)}},timeout);var newUrl=url;var cbName="Fit._internal.Http.JsonpRequest.Callbacks."+cbId;newUrl+=(newUrl.indexOf("?")===-1?"?":"&")+cbKey+"="+cbName;Fit.Array.ForEach(data,function(key){newUrl+="&"+key+"="+data[key]});var script=document.createElement("script");script.type="text/javascript";script.src=newUrl;document.getElementsByTagName("head")[0].appendChild(script)};this.GetResponse=function(){return response};this.OnRequest=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onRequestHandlers,func)};this.OnSuccess=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onSuccessHandlers,func)};this.OnTimeout=function(func){Fit.Validation.ExpectFunction(func);Fit.Array.Add(onTimeoutHandlers,func)};function fireEvent(handlers){var canceled=false;Fit.Array.ForEach(handlers,function(handler){if(handler(me)===false)canceled=true});return!canceled}};Fit.Http.DotNetJsonRequest=Fit.Http.JsonRequest;Fit.Internationalization={_internal:{Locale:"en",Locales:{},Additions:{},OnChangeHandlers:[]}};Fit.Internationalization._internal.AddSystemLocalization=function(locales){Fit.Validation.ExpectObject(locales);Fit.Array.ForEach(locales,function(localeKey){var key=localeKey.toLowerCase();var locale=null;if(key!=="en"){var english=locales["en"]||Fit.Internationalization._internal.Locales["en"]||null;if(english===null)Fit.Validation.ThrowError("Unexpected error - English not defined in System Locales");locale=Fit.Core.Merge(english,locales[localeKey])}else{locale=locales[localeKey]}if(key.indexOf("_")!==-1){var primaryLangKey=key.split("_")[0];var primaryLocale=locales[primaryLangKey]||Fit.Internationalization._internal.Locales[primaryLangKey]||null;if(primaryLocale===null)Fit.Validation.ThrowError("Unexpected error - '"+primaryLangKey+"' not defined in System Locales");locale=Fit.Core.Merge(primaryLocale,locales[localeKey])}Fit.Internationalization._internal.Locales[key]=locale})};Fit.Internationalization.GetSystemLocale=function(localeKey){Fit.Validation.ExpectString(localeKey,true);var locale=localeKey?localeKey.toLowerCase():Fit.Internationalization._internal.Locale;var locales=Fit.Internationalization._internal.Locales;var found=locales[locale]||null;if(found===null&&locale.indexOf("_")!==-1){var key=locale.split("_")[0];found=locales[key]||null}if(found===null){found=locales["en"]||null}if(found===null){Fit.Validation.ThrowError("Unexpected error - English not defined in System Locales")}return Fit.Core.Clone(found)};Fit.Internationalization.Locale=function(locale){Fit.Validation.ExpectString(locale,true);if(Fit.Validation.IsSet(locale)===true){var key=locale.toLowerCase();if(Fit.Core.IsEqual(Fit.Internationalization.GetSystemLocale(key),Fit.Internationalization.GetSystemLocale())===false){Fit.Internationalization._internal.Locale=key;Fit.Array.ForEach(Fit.Array.Copy(Fit.Internationalization._internal.OnChangeHandlers),function(onChangeHandler){if(onChangeHandler._fitUiInternationalizationRemoved===undefined){onChangeHandler()}})}}return Fit.Internationalization._internal.Locale};Fit.Internationalization.AddLocalization=function(type,translations){Fit.Validation.IsSet(type);Fit.Validation.ExpectObject(translations);type._internal=type._internal||{};type._internal.LocalizationKey=type._internal.LocalizationKey||Fit.Data.CreateGuid();var typeId=type._internal.LocalizationKey;Fit.Internationalization._internal.Additions[typeId]=Fit.Internationalization._internal.Additions[typeId]||{};var existingTranslations=Fit.Internationalization._internal.Additions[typeId];Fit.Array.ForEach(translations,function(key){var localeKey=key.toLowerCase();var translationSet=translations[key];if(localeKey!=="en"){var english=translations["en"]||existingTranslations["en"]||null;if(english===null)Fit.Validation.ThrowError("Unexpected error - English (en) not defined in locales");translationSet=Fit.Core.Merge(english,translationSet)}if(localeKey.indexOf("_")!==-1){var primaryLangKey=localeKey.split("_")[0];var primaryLocale=translations[primaryLangKey]||existingTranslations[primaryLangKey]||null;if(primaryLocale===null)Fit.Validation.ThrowError("Unexpected error - '"+primaryLangKey+"' not defined in locales");translationSet=Fit.Core.Merge(primaryLocale,translationSet)}existingTranslations[localeKey]=translationSet})};Fit.Internationalization.GetLocale=function(instance,locale){Fit.Validation.ExpectIsSet(instance);Fit.Validation.ExpectString(locale,true);var found=null;if(instance.constructor._internal&&instance.constructor._internal.LocalizationKey){var langKey=(locale?locale.toLowerCase():null)||Fit.Internationalization._internal.Locale;found=Fit.Internationalization._internal.Additions[instance.constructor._internal.LocalizationKey][langKey]||null;if(found===null&&langKey.indexOf("_")!==-1){var primaryLangKey=langKey.split("_")[0];found=Fit.Internationalization._internal.Additions[instance.constructor._internal.LocalizationKey][primaryLangKey]||null}if(found===null){found=Fit.Internationalization._internal.Additions[instance.constructor._internal.LocalizationKey]["en"]||null}}return found};Fit.Internationalization.OnLocaleChanged=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(Fit.Internationalization._internal.OnChangeHandlers,cb);delete cb._fitUiInternationalizationRemoved};Fit.Internationalization.RemoveOnLocaleChanged=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Remove(Fit.Internationalization._internal.OnChangeHandlers,cb);cb._fitUiInternationalizationRemoved=true};Fit.Language={};Fit.Language.Translations={};Fit.Language.Translations.Required="Field is required";Fit.Language.Translations.InvalidSelection="Invalid selection";Fit.Language.Translations.SelectFile="Select file";Fit.Language.Translations.SelectFiles="Select file(s)";Fit.Language.Translations.Ok="OK";Fit.Language.Translations.Cancel="Cancel";Fit.Loader={};Fit.Loader.ExecuteScript=function(src,onSuccess,onFailure,context){Fit.Validation.ExpectStringValue(src);Fit.Validation.ExpectFunction(onSuccess,true);Fit.Validation.ExpectFunction(onFailure,true);var r=new Fit.Http.Request(src);r.OnSuccess(function(sender){var js=r.GetResponseText();var error=null;if(Fit.Validation.IsSet(context)===false||context===window){try{eval(js)}catch(err){error=err}}else{var args="";var parms="";for(var prop in context?context:{}){args+=(args!==""?", ":"")+prop;parms+=(parms!==""?", ":"")+"this."+prop}try{eval("(function() { return (function() { (function("+args+") { "+js+" })("+parms+"); }); })();").call(context?context:this)}catch(err){error=err}}if(error===null&&Fit.Validation.IsSet(onSuccess)===true){onSuccess(src)}else if(error!==null){if(window.console){console.log(error.message);console.log(error.stack);console.log(error)}if(Fit.Validation.IsSet(onFailure)===true)onFailure(src)}});r.OnFailure(function(sender){if(Fit.Validation.IsSet(onFailure)===true){onFailure(src)}});r.Start()};Fit.Loader.LoadScript=function(source,cb){var src=null;var attributes=null;var callback=null;if(arguments.length===1||arguments.length===2&&typeof arguments[1]==="function"){src=arguments[0];callback=arguments[1]||null}else if(arguments.length>=2){src=arguments[0];attributes=arguments[1]||null;callback=arguments[2]||null}Fit.Validation.ExpectStringValue(src);Fit.Validation.ExpectDictionary(attributes,Fit.Validation.ExpectString,true);Fit.Validation.ExpectFunction(callback,true);var script=document.createElement("script");script.type="text/javascript";script.charset="UTF-8";if(attributes!==null){Fit.Array.ForEach(attributes,function(key){script.setAttribute(key,attributes[key])})}if(callback!==null&&(Fit.Browser.GetBrowser()!=="MSIE"||Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()>=9)){script.onload=function(){callback(src)};script.onerror=function(){callback(src)}}else if(callback!==null&&Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()<=8){script.onreadystatechange=function(){if(this.readyState==="complete"||this.readyState==="loaded")callback(src)}}script.src=src;document.getElementsByTagName("head")[0].appendChild(script)};Fit.Loader.LoadScripts=function(cfg,callback,skipValidation){Fit.Validation.ExpectArray(cfg);Fit.Validation.ExpectFunction(callback,true);Fit.Validation.ExpectBoolean(skipValidation,true);if(skipValidation!==true){for(var i=0;i<cfg.length;i++){Fit.Validation.ExpectStringValue(cfg[i].source);Fit.Validation.ExpectDictionary(cfg[i].attributes,Fit.Validation.ExpectString,true);Fit.Validation.ExpectFunction(cfg[i].loaded,true)}}var toLoad=null;for(var i=0;i<cfg.length;i++){if(cfg[i].handled!==true){toLoad=cfg[i];break}}if(toLoad===null){if(Fit.Validation.IsSet(callback)===true)callback(cfg);return}toLoad.handled=true;Fit.Loader.LoadScript(toLoad.source,toLoad.attributes||{},function(){if(Fit.Validation.IsSet(toLoad.loaded)===true){try{toLoad.loaded(toLoad)}catch(err){if(window.console){console.log(err.message);console.log(err.stack);console.log(err)}}}Fit.Loader.LoadScripts(cfg,callback,true)})};Fit.Loader.LoadStyleSheet=function(src,callback){Fit.Validation.ExpectStringValue(src);Fit.Validation.ExpectFunction(callback,true);var link=document.createElement("link");link.type="text/css";link.rel="stylesheet";if(Fit.Validation.IsSet(callback)===true&&(Fit.Browser.GetBrowser()!=="MSIE"||Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()>=9)){link.onload=function(){callback(src)};link.onerror=function(){callback(src)}}else if(Fit.Validation.IsSet(callback)===true&&Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()<=8){link.onreadystatechange=function(){if(this.readyState==="complete"||this.readyState==="loaded")callback(src)}}link.href=src;document.getElementsByTagName("head")[0].appendChild(link)};Fit.Loader.LoadStyleSheets=function(cfg,callback){Fit.Validation.ExpectArray(cfg);Fit.Validation.ExpectFunction(callback,true);for(var i=0;i<cfg.length;i++){Fit.Validation.ExpectStringValue(cfg[i].source);Fit.Validation.ExpectFunction(cfg[i].loaded,true)}if(cfg.length===0){if(Fit.Validation.IsSet(callback)===true)callback(cfg);return}for(var i=0;i<cfg.length;i++){Fit.Loader.LoadStyleSheet(cfg[i].source,function(src){for(var j=0;j<cfg.length;j++){if(cfg[j].source===src){cfg[j].handled=true;if(Fit.Validation.IsSet(cfg[j].loaded)===true){try{cfg[j].loaded(cfg[j])}catch(err){if(window.console){console.log(err.message);console.log(err.stack);console.log(err)}}}break}}for(var j=0;j<cfg.length;j++){if(cfg[j].handled!==true)return}if(Fit.Validation.IsSet(callback)===true)callback(cfg)})}};Fit.Template=function(refreshable,autoDispose){Fit.Validation.ExpectBoolean(refreshable,true);Fit.Validation.ExpectBoolean(autoDispose,true);var me=this;var allowUnsafe=-1;var unsafeWarned=false;var htmlContent="";var container=null;var pendingElements=[];var nodesRendered=[];var eventHandlers=[];var controls=[];function init(){if(refreshable===true)container=document.createElement("div")}this.Content=null;this.LoadHtml=function(htmlSource){Fit.Validation.ExpectString(htmlSource);parse(htmlSource)};this.LoadUrl=function(url,cb){Fit.Validation.ExpectString(url);Fit.Validation.ExpectFunction(cb);var r=new Fit.Http.Request(url);r.OnSuccess(function(sender){parse(r.GetResponseText());cb(me,r.GetResponseText())});r.Start()};this.AllowUnsafeContent=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){allowUnsafe=val===true?1:0}return allowUnsafe!==0};this.Reset=function(){parse(htmlContent);eventHandlers=[]};this.Dispose=function(){if(autoDispose!==false){Fit.Array.ForEach(controls,function(controlElm){if(controlElm._internal!==undefined){controlElm._internal.Instance.Dispose()}})}if(container!==null){Fit.Dom.Remove(container)}else{Fit.Array.ForEach(nodesRendered,function(node){Fit.Dom.Remove(node)})}this.Content=null;me=htmlContent=container=pendingElements=nodesRendered=eventHandlers=controls=null};this.GetHtml=function(){return me.toString()};this.Render=function(toElement){Fit.Validation.ExpectDomElement(toElement,true);if(nodesRendered.length>0)return;var html=me.toString();var dom=Fit.Dom.CreateElement("<div>"+html+"</div>");Fit.Array.ForEach(pendingElements,function(elm){var element=dom.querySelector("var.FitTemplate[id='PH"+elm.Id+"']");if(element!==null){Fit.Dom.Replace(element,elm.Element)}if(elm.Element._internal!==undefined&&elm.Element._internal.Instance!==undefined){Fit.Array.Add(controls,elm.Element)}});Fit.Array.Clear(pendingElements);Fit.Array.ForEach(eventHandlers,function(ev){if(ev===null)return;var elm=dom.querySelector("#"+ev.ElementId);if(elm!==null)Fit.Events.AddHandler(elm,ev.EventType,ev.Callback)});var renderTarget=container!==null?container:toElement;var nodes=Fit.Array.Copy(dom.childNodes);nodesRendered=[];if(Fit.Validation.IsSet(renderTarget)===true){Fit.Array.ForEach(nodes,function(n){Fit.Dom.Add(renderTarget,n);Fit.Array.Add(nodesRendered,n)})}else{var script=document.scripts[document.scripts.length-1];Fit.Array.ForEach(nodes,function(n){Fit.Dom.InsertBefore(script,n);Fit.Array.Add(nodesRendered,n)})}if(container!==null){if(Fit.Validation.IsSet(toElement)===true){Fit.Dom.Add(toElement,container)}else{var script=document.scripts[document.scripts.length-1];Fit.Dom.InsertBefore(script,container)}}};this.AddEventHandler=function(elmId,event,eventFunction){Fit.Validation.ExpectStringValue(elmId);Fit.Validation.ExpectStringValue(event);Fit.Validation.ExpectFunction(eventFunction);Fit.Array.Add(eventHandlers,{ElementId:elmId,EventType:event,Callback:eventFunction});return eventHandlers.length-1};this.RemoveEventHandler=function(eventId){Fit.Validation.ExpectInteger(eventId);if(eventHandlers.length-1>=eventId)eventHandlers[eventId]=null};this.Update=function(){if(container===null)throw"UpdateTemplateError: Template has not been configured to allow updates";var html=me.toString();var dom=Fit.Dom.CreateElement("<div>"+html+"</div>");var oldControls=controls;controls=[];Fit.Array.ForEach(pendingElements,function(elm){var element=dom.querySelector("var.FitTemplate[id='PH"+elm.Id+"']");if(element!==null){Fit.Dom.Replace(element,elm.Element)}if(elm.Element._internal!==undefined&&elm.Element._internal.Instance!==undefined){Fit.Array.Add(controls,elm.Element)}});Fit.Array.Clear(pendingElements);if(autoDispose!==false){Fit.Array.ForEach(oldControls,function(oldControl){if(Fit.Array.Contains(controls,oldControl)===false&&oldControl._internal!==undefined){oldControl._internal.Instance.Dispose()}})}Fit.Array.ForEach(eventHandlers,function(ev){if(ev===null)return;var elm=dom.querySelector("#"+ev.ElementId);if(elm!==null)Fit.Events.AddHandler(elm,ev.EventType,ev.Callback)});container.innerHTML="";var nodes=Fit.Array.Copy(dom.childNodes);nodesRendered=[];Fit.Array.ForEach(nodes,function(n){Fit.Dom.Add(container,n);Fit.Array.Add(nodesRendered,n)})};this.toString=function(){if(allowUnsafe===-1&&unsafeWarned===false){unsafeWarned=true;Fit.Browser.Log("WARNING: An instance of Fit.Template allows for unsafe content which could potentially lead to code injection (XSS attacks). The default behaviour for handling unsafe content will change in the future from allowing unsafe content to NOT allowing unsafe content which may break this application. Please explicitely set AllowUnsafeContent(bool) to ensure compatibility with future versions of Fit.UI.")}var newHtml=htmlContent;Fit.Array.Clear(pendingElements);Fit.Array.ForEach(me.Content,function(key){var obj=me.Content[key];if(!obj)return;if(obj._internal!==undefined&&obj._internal.IsFitTemplate===true){newHtml=newHtml.replace(obj._internal.Block,obj.toString())}else{if(Fit.Core.InstanceOf(obj,Fit.Controls.Component)===true){var id=Fit.Data.CreateGuid();Fit.Array.Add(pendingElements,{Id:id,Element:obj.GetDomElement()});newHtml=newHtml.replace("{["+key+"]}","<var class='FitTemplate' id='PH"+id+"'></var>")}else if(typeof obj==="object"&&(obj instanceof Element||obj instanceof Text)){var id=Fit.Data.CreateGuid();Fit.Array.Add(pendingElements,{Id:id,Element:obj});newHtml=newHtml.replace("{["+key+"]}","<var class='FitTemplate' id='PH"+id+"'></var>")}else{var sVal=me.AllowUnsafeContent()===true?obj.toString():Fit.String.EncodeHtml(obj.toString());newHtml=newHtml.replace(new RegExp("{\\["+key+"\\]}","g"),sVal)}}});newHtml=newHtml.replace(/\{\[(\S+?)\]\}/g,"");return newHtml};function parse(sourceHtml){Fit.Validation.ExpectString(sourceHtml);htmlContent=sourceHtml;var result={};var lists=handleLists(htmlContent);Fit.Array.ForEach(lists,function(l){result[l]=lists[l]});var placeHolders=handlePlaceHolders(htmlContent);Fit.Array.ForEach(placeHolders,function(ph){result[ph]=placeHolders[ph]});me.Content=result}function handleLists(html){Fit.Validation.ExpectString(html);var regEx=/<!-- LIST (\S+) -->[\S\s]*<!-- \/LIST \1 -->/g;var match;var res={};while(match=regEx.exec(html)){res[match[1]]=createListObject(match[1],match[0])}return res}function handlePlaceHolders(html){Fit.Validation.ExpectString(html);var regExLists=/<!-- LIST (\S+) -->[\S\s]*<!-- \/LIST \1 -->/g;html=html.replace(regExLists,"");var regEx=/\{\[(\S+?)\]\}/g;var match;var res={};while(match=regEx.exec(html)){res[match[1]]=null}return res}function createListObject(name,html){Fit.Validation.ExpectString(name);Fit.Validation.ExpectString(html);var res={_internal:{}};res._internal.Id=name;res._internal.Block=html;res._internal.Html=html.replace("\x3c!-- LIST "+name+" --\x3e","").replace("\x3c!-- /LIST "+name+" --\x3e","");res._internal.Items=[];res._internal.PendingElements=pendingElements;res._internal.IsFitTemplate=true;res.AddItem=function(){var item=handlePlaceHolders(res._internal.Html);var nestedLists=handleLists(res._internal.Html);Fit.Array.ForEach(nestedLists,function(l){item[l]=nestedLists[l]});Fit.Array.Add(res._internal.Items,item);return item};res.GetItems=function(){return res._internal.Items};res.RemoveItem=function(item){Fit.Array.Remove(res._internal.Items,item)};res.Clear=function(){Fit.Array.Clear(res._internal.Items)};res.toString=function(){var listHtml="";function populateItem(itemHtml,item){Fit.Array.ForEach(item,function(prop){var obj=item[prop];if(!obj)return;if(obj._internal!==undefined&&obj._internal.IsFitTemplate===true){var allSubItems="";Fit.Array.ForEach(obj._internal.Items,function(subItem){allSubItems+=populateItem(obj._internal.Html,subItem)});itemHtml=itemHtml.replace(obj._internal.Block,allSubItems)}else if(Fit.Core.InstanceOf(obj,Fit.Controls.Component)===true){var id=Fit.Data.CreateGuid();Fit.Array.Add(res._internal.PendingElements,{Id:id,Element:obj.GetDomElement()});itemHtml=itemHtml.replace("{["+prop+"]}","<var class='FitTemplate' id='PH"+id+"'></var>")}else if(typeof obj==="object"&&(obj instanceof Element||obj instanceof Text)){var id=Fit.Data.CreateGuid();Fit.Array.Add(res._internal.PendingElements,{Id:id,Element:obj});itemHtml=itemHtml.replace("{["+prop+"]}","<var class='FitTemplate' id='PH"+id+"'></var>")}else{var sVal=me.AllowUnsafeContent()===true?obj.toString():Fit.String.EncodeHtml(obj.toString());itemHtml=itemHtml.replace(new RegExp("{\\["+prop+"\\]}","g"),sVal)}});return itemHtml}var itmHtml=res._internal.Html;Fit.Array.ForEach(res._internal.Items,function(item){listHtml+=populateItem(itmHtml,item)});return listHtml};return res}init()};Fit.TypeDefs={};Fit.TypeDefs.CssUnit={cm:"cm",mm:"mm",in:"in",px:"px",pt:"pt",pc:"pc",em:"em",ex:"ex",ch:"ch",rem:"rem",vw:"vw",vh:"vh",vmin:"vmin",vmax:"vmax","%":"%"};Fit.Internationalization._internal.AddSystemLocalization({en:{Formatting:{DecimalSeparator:".",ThousandsSeparator:",",DateFormat:"MM/DD/YYYY",TimeFormat:"hh:mm",TimeFormatLong:"hh:mm:ss",ClockHours:12},Translations:{Required:"Field is required"}},en_GB:{Formatting:{DateFormat:"DD/MM/YYYY"}},da:{Formatting:{DecimalSeparator:",",ThousandsSeparator:".",DateFormat:"DD-MM-YYYY",ClockHours:24},Translations:{Required:"Feltet er påkrævet"}},de:{Formatting:{DecimalSeparator:",",ThousandsSeparator:".",DateFormat:"DD.MM.YYYY",ClockHours:24},Translations:{Required:"Feld ist erforderlich"}},no:{Formatting:{DecimalSeparator:",",ThousandsSeparator:".",DateFormat:"DD-MM-YYYY",ClockHours:24},Translations:{Required:"Feltet er påkrevd"}}});Fit.Controls.Button=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.Component).Apply(controlId);var me=this;var id=me.GetId();var element=me.GetDomElement();var wrapper=null;var icon=null;var label=null;var width={Value:-1,Unit:"px"};var height={Value:-1,Unit:"px"};var returnFocus=false;var onClickHandlers=[];function init(){var invokeClick=true;var focusedBeforeClick=null;Fit.Events.AddHandler(element,Fit.Browser.IsTouchEnabled()===true?"touchstart":"mousedown",function(e){invokeClick=true;focusedBeforeClick=returnFocus===true?Fit.Dom.GetFocused():null});Fit.Browser.IsTouchEnabled()===true&&Fit.Events.AddHandler(element,"touchmove",function(e){invokeClick=false});Fit.Events.AddHandler(element,Fit.Browser.IsTouchEnabled()===true?"touchend":"click",function(e){if(invokeClick===true&&me.Enabled()===true){me.Focused(true);me.Click()}if(focusedBeforeClick!==null){focusedBeforeClick.focus();focusedBeforeClick=null}});Fit.Browser.IsTouchEnabled()===true&&Fit.Events.AddHandler(element,"touchcancel",function(e){focusedBeforeClick=null});Fit.Events.AddHandler(element,"keydown",function(e){var ev=Fit.Events.GetEvent(e);if(me.Enabled()===true&&(ev.keyCode===13||ev.keyCode===32)){me.Click();Fit.Events.PreventDefault(ev)}});Fit.Dom.AddClass(element,"FitUiControl");Fit.Dom.AddClass(element,"FitUiControlButton");wrapper=document.createElement("div");Fit.Dom.Add(element,wrapper);icon=document.createElement("span");Fit.Dom.Add(wrapper,icon);label=document.createElement("span");Fit.Dom.Add(wrapper,label);me.Enabled(true);me.Type(Fit.Controls.ButtonType.Default)}this.Title=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){Fit.Dom.Data(element,"title",val!==""?val:null);label.innerHTML=val}return Fit.Dom.Data(element,"title")!==null?Fit.Dom.Data(element,"title"):""};this.Icon=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){Fit.Dom.Data(element,"icon",val!==""?val:null);icon.className=val!==""?"fa "+(val.indexOf("fa-")!==0?"fa-":"")+val:""}return Fit.Dom.Data(element,"icon")!==null?Fit.Dom.Data(element,"icon"):""};this.Type=function(val){Fit.Validation.ExpectStringValue(val,true);if(Fit.Validation.IsSet(val)===true){if(Fit.Validation.IsSet(Fit.Controls.ButtonType[val])===false)Fit.Validation.ThrowError("Unsupported button type specified - use e.g. Fit.Controls.ButtonType.Default");Fit.Dom.Data(element,"type",val)}return Fit.Dom.Data(element,"type")};this.Enabled=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==me.Enabled()){Fit.Dom.Data(element,"enabled",val===true?"true":"false");if(val===true){element.tabIndex=0}else{me.Focused(false);Fit.Dom.Attribute(element,"tabindex",null)}me._internal.Repaint()}return Fit.Dom.Data(element,"enabled")==="true"};this.Focused=function(focus){Fit.Validation.ExpectBoolean(focus,true);if(Fit.Validation.IsSet(focus)===true){if(focus===true)element.focus();else element.blur()}return Fit.Dom.GetFocused()===element||Fit.Dom.GetFocused()&&Fit.Dom.Contained(element,Fit.Dom.GetFocused())};this.Width=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){if(val>-1){width={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};element.style.width=width.Value+width.Unit}else{width={Value:-1,Unit:"px"};element.style.width=""}}return width};this.Height=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){if(val>-1){height={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};element.style.height=height.Value+height.Unit;wrapper.style.position="relative"}else{height={Value:-1,Unit:"px"};element.style.height="";wrapper.style.position=""}}return height};this.ReturnFocus=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){returnFocus=val}return returnFocus};this.OnClick=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onClickHandlers,cb)};this.Click=function(){Fit.Array.ForEach(onClickHandlers,function(handler){handler(me)})};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){me=id=element=wrapper=icon=label=width=height=returnFocus=onClickHandlers=null;base()});init()};Fit.Controls.ButtonType={Default:"Default",Primary:"Primary",Success:"Success",Info:"Info",Warning:"Warning",Danger:"Danger"};Fit.Controls.Button.Type=Fit.Controls.ButtonType;Fit.Controls.CheckBox=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.ControlBase).Apply(ctlId);var me=this;var checkbox=null;var label=null;var width={Value:-1,Unit:"px"};var orgChecked=false;var isIe8=Fit.Browser.GetInfo().Name==="MSIE"&&Fit.Browser.GetInfo().Version===8;function init(){me.AddCssClass("FitUiControlCheckBox");me.GetDomElement().tabIndex=0;checkbox=document.createElement("div");Fit.Dom.AddClass(checkbox,"fa");Fit.Dom.AddClass(checkbox,"fa-check");Fit.Events.AddHandler(me.GetDomElement(),"click",function(e){if(me.Enabled()===true){me.Checked(!me.Checked(),true)}});Fit.Events.AddHandler(me.GetDomElement(),"keydown",function(e){var ev=Fit.Events.GetEvent(e);if(me.Enabled()===true&&ev.keyCode===32){me.Checked(!me.Checked(),true);Fit.Events.PreventDefault(ev)}});label=document.createElement("span");me._internal.AddDomElement(checkbox);me._internal.AddDomElement(label);me.Enabled(true);me.Checked(false);me.Width(-1);Fit.Internationalization.OnLocaleChanged(localize)}this.Focused=function(focus){Fit.Validation.ExpectBoolean(focus,true);if(Fit.Validation.IsSet(focus)===true){if(focus===true)me.GetDomElement().focus();else me.GetDomElement().blur()}return Fit.Dom.GetFocused()===me.GetDomElement()||Fit.Dom.GetFocused()&&Fit.Dom.Contained(me.GetDomElement(),Fit.Dom.GetFocused())};this.Value=function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){var valStr=val.toLowerCase();if(valStr==="true"){me.Checked(true,preserveDirtyState)}else if(valStr==="false"){me.Checked(false,preserveDirtyState)}}return me.Checked()===true?"true":"false"};this.Checked=function(val,preserveDirtyState){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){var before=Fit.Dom.Data(me.GetDomElement(),"checked")==="true";Fit.Dom.Data(me.GetDomElement(),"checked",val.toString());if(preserveDirtyState!==true)orgChecked=Fit.Dom.Data(me.GetDomElement(),"checked")==="true";if(before!==val){repaint();me._internal.FireOnChange()}}return Fit.Dom.Data(me.GetDomElement(),"checked")==="true"};this.Width=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){if(val>-1){width={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};me.GetDomElement().style.width=width.Value+width.Unit}else{width={Value:-1,Unit:"px"};me.GetDomElement().style.width=""}}return width};this.IsDirty=function(){return orgChecked!==me.Checked()};this.Clear=function(){me.Checked(false)};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){Fit.Internationalization.RemoveOnLocaleChanged(localize);me=checkbox=label=width=orgChecked=isIe8=null;base()});this.IsValid=Fit.Core.CreateOverride(this.IsValid,function(){if(me.Required()===true&&me.Checked()===false){return false}return base()});this._internal.Validate=Fit.Core.CreateOverride(this._internal.Validate,function(){if(me.Required()===true&&me.Checked()===false){var locale=Fit.Internationalization.GetSystemLocale();me._internal.Data("errormessage",locale.Translations.Required)}base()});this.Label=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){label.innerHTML=val}return label.innerHTML};this.Enabled=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==me.Enabled()){Fit.Dom.Data(me.GetDomElement(),"enabled",val.toString());if(val===true){me.GetDomElement().tabIndex=0}else{me.Focused(false);Fit.Dom.Attribute(me.GetDomElement(),"tabindex",null)}me._internal.UpdateInternalState();me._internal.Repaint()}return Fit.Dom.Data(me.GetDomElement(),"enabled")==="true"};function localize(){me._internal.Validate()}function repaint(){if(isIe8===true){var focused=Fit.Dom.GetFocused();var elm=document.createElement("span");Fit.Dom.Replace(checkbox,elm);Fit.Dom.Replace(elm,checkbox);if(Fit.Dom.GetFocused()!==focused)focused.focus()}}init()};Fit.Controls.ColorPicker=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.ControlBase).Apply(ctlId);var me=this;var colorPicker=null;var lblValue=null;var orgColor="";var prevColor="";var cmdClear=null;var defaultColor="#FFD6D6";function init(){me.AddCssClass("FitUiControlColorPicker");transparent(true);colorPicker=document.createElement("input");colorPicker.type="color";colorPicker.value=defaultColor;colorPicker.oninput=function(){if(me===null){return}transparent(false);fireOnChange()};me._internal.AddDomElement(colorPicker);lblValue=document.createElement("span");lblValue.tabIndex=-1;lblValue.onclick=function(e){if(window.getSelection().isCollapsed===true){colorPicker.click()}};me._internal.AddDomElement(lblValue);cmdClear=document.createElement("span");cmdClear.tabIndex=-1;cmdClear.innerHTML="&times;";cmdClear.onclick=function(){colorPicker.focus();transparent(true);colorPicker.value=defaultColor;prevColor=defaultColor;fireOnChange()};me._internal.AddDomElement(cmdClear)}this.Focused=function(focus){Fit.Validation.ExpectBoolean(focus,true);if(Fit.Validation.IsSet(focus)===true&&focus!==me.Focused()){if(focus===true){colorPicker.focus()}else{Fit.Dom.GetFocused().blur()}}return Fit.Dom.Contained(me.GetDomElement(),Fit.Dom.GetFocused())};this.Value=function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){val=val.toUpperCase();if(me.Value()!==val){var changed=false;if(val===""){transparent(true);changed=true}else if(isValidColor(val)===true){transparent(false);colorPicker.value=val;changed=true}if(changed===true){orgColor=preserveDirtyState!==true?val:orgColor;fireOnChange()}}}return transparent()?"":colorPicker.value.toUpperCase()};this.IsDirty=function(){return orgColor!==me.Value()};this.Clear=function(){me.Value("")};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){me=colorPicker=lblValue=orgColor=prevColor=cmdClear=defaultColor=null;base()});this.ShowValue=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){lblValue.style.display=val===false?"none":""}return lblValue.style.display===""};function transparent(val){if(Fit.Validation.IsSet(val)===true){me._internal.Data("transparent",val?"true":"false")}return me._internal.Data("transparent")==="true"}function isValidColor(val){return/^#[A-F0-9]{6}$/.test(val)}function fireOnChange(){var newVal=me.Value();var compareValue=prevColor.toUpperCase();if(newVal!==compareValue){prevColor=newVal;me._internal.FireOnChange();var contrastColor=me.Value()!==""?Fit.Color.GetContrastColor(me.Value(),120):"black";me.GetDomElement().style.background=me.Value();lblValue.innerHTML=me.Value();lblValue.style.color=contrastColor;cmdClear.style.color=contrastColor}}init()};Fit.Controls.ContextMenu=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.Component).Apply(controlId);var me=this;var tree=new Fit.Controls.TreeView("ContextMenuTreeView_"+Fit.Data.CreateGuid());var prevFocused=null;var detectBoundaries=true;var highlightOnInitKeyStroke=true;var isIe8=Fit.Browser.GetInfo().Name==="MSIE"&&Fit.Browser.GetInfo().Version===8;var onShowing=[];var onShown=[];var onHide=[];var onSelect=[];function init(){Fit.Dom.Data(tree.GetDomElement(),"keynav","false");Fit.Dom.Data(tree.GetDomElement(),"sticky","false");Fit.Dom.Data(tree.GetDomElement(),"viewportcollision","false");tree.AddCssClass("FitUiControlContextMenu");tree.Selectable(true);tree.KeyboardNavigation(false);Fit.Events.AddHandler(tree.GetDomElement(),"keydown",function(e){var ev=Fit.Events.GetEvent(e);if(ev.keyCode===27){if(prevFocused!==null){prevFocused.focus();prevFocused=null}me.Hide();return}var node=tree.GetNodeFocused();if(node===null)return;if(highlightOnInitKeyStroke===true){highlightOnInitKeyStroke=false;Fit.Dom.Data(tree.GetDomElement(),"keynav","true");repaint();if(ev.keyCode===40&&tree.GetChildren().length>0){tree.GetChildren()[0].Focused(true);Fit.Events.PreventDefault(ev);return}}if(ev.keyCode===37){if(node.Expanded()===true){node.Expanded(false)}else if(node.GetParent()!==null){node.GetParent().Focused(true)}Fit.Events.PreventDefault(ev);return}if(ev.keyCode===39){if(node.GetChildren().length>0){node.Expanded(true);node.GetChildren()[0].Focused(true)}Fit.Events.PreventDefault(ev);return}if(ev.keyCode===38){var newNode=tree.GetNodeAbove(node);if(newNode!==null)newNode.Focused(true);Fit.Events.PreventDefault(ev);return}if(ev.keyCode===40){var newNode=tree.GetNodeBelow(node);if(newNode!==null)newNode.Focused(true);Fit.Events.PreventDefault(ev);return}if(ev.keyCode===13){if(node.Selectable()===true)node.Selected(true);Fit.Events.PreventDefault(ev);return}});tree.OnSelected(function(sender,node){if(node.Selected()===true){node.Selected(false);node.Expanded(!node.Expanded());var links=node.GetDomElement().getElementsByTagName("a");if(links.length===1&&Fit.Dom.GetParentOfType(links[0],"li")===node.GetDomElement()){if(links[0]!==Fit.Events.GetPointerState().Target)links[0].click();me.Hide()}else{fireEventHandlers(onSelect,node.GetDomElement()._internal.ContextMenuItem)}}});tree.OnToggled(function(sender,node){if(node.Expanded()===false){Fit.Array.ForEach(node.GetChildren(),function(c){c.Expanded(false)})}else{if(node.Focused()===true){Fit.Dom.Data(tree.GetDomElement(),"sticky","true");highlightOnInitKeyStroke=false;var expanded=null;var currentNode=node;while(currentNode!==null){if(currentNode.GetParent()!==null)expanded=getExpandedChild(currentNode.GetParent().GetChildren(),currentNode);else expanded=getExpandedChild(tree.GetChildren(),currentNode);if(expanded!==null){expanded.Expanded(false);break}currentNode=currentNode.GetParent()}}if(node.GetParent()!==null)node.GetParent().Expanded(true);if(detectBoundaries===true)handleViewPortCollision(node.GetDomElement())}});Fit.Events.AddHandler(tree.GetDomElement(),"mouseover",function(e){if(detectBoundaries===true&&Fit.Dom.Data(tree.GetDomElement(),"sticky")==="false"){var elm=Fit.Events.GetTarget(e);elm=elm.tagName==="LI"?elm:Fit.Dom.GetParentOfType(elm,"li");if(elm!==null)handleViewPortCollision(elm)}});Fit.Events.AddHandler(tree.GetDomElement(),"click",function(e){Fit.Events.StopPropagation(e)})}this.Show=function(x,y){Fit.Validation.ExpectInteger(x,true);Fit.Validation.ExpectInteger(y,true);if(me._internal.ExecuteBeforeShowBehaviour()===false)return;me._internal.ExecuteShowBehaviour(x,y)};this.Hide=function(){if(me.IsVisible()===true){Fit.Dom.Remove(tree.GetDomElement());fireEventHandlers(onHide);Fit.Array.ForEach(tree.GetChildren(),function(n){n.Expanded(false)});highlightOnInitKeyStroke=true;Fit.Dom.Data(tree.GetDomElement(),"keynav","false");Fit.Dom.Data(tree.GetDomElement(),"viewportcollision","false");Fit.Dom.Data(tree.GetDomElement(),"sticky","false");Fit.Array.ForEach(tree.GetDomElement().getElementsByTagName("ul"),function(ul){Fit.Dom.Data(ul,"viewportcollision",null)})}};this.DetectBoundaries=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===false){Fit.Dom.Data(tree.GetDomElement(),"viewportcollision","false");Fit.Array.ForEach(tree.GetDomElement().getElementsByTagName("ul"),function(ul){Fit.Dom.Data(ul,"viewportcollision",null)})}detectBoundaries=val}return detectBoundaries};this.IsVisible=function(){return tree.GetDomElement().parentElement!==null};this.GetDomElement=function(){return tree.GetDomElement()};this.Render=function(toElement){Fit.Validation.ThrowError("Use Show function to open ContextMenu")};this.AddChild=function(item){Fit.Validation.ExpectInstance(item,Fit.Controls.ContextMenuItem);var tvNode=item.GetDomElement()._internal.Node;tree.AddChild(tvNode)};this.RemoveChild=function(item){Fit.Validation.ExpectInstance(item,Fit.Controls.ContextMenuItem);var tvNode=tree.GetChild(item.Value());if(tvNode!==null)tree.RemoveChild(tvNode)};this.RemoveAllChildren=function(dispose){Fit.Validation.ExpectBoolean(dispose,true);tree.RemoveAllChildren(dispose)};this.GetChild=function(val,recursive){Fit.Validation.ExpectString(val);Fit.Validation.ExpectBoolean(recursive,true);var tvNode=tree.GetChild(val,recursive);if(tvNode===null)return null;return tvNode.GetDomElement()._internal.ContextMenuItem};this.GetChildren=function(){var items=[];Fit.Array.ForEach(tree.GetChildren(),function(tvNode){Fit.Array.Add(items,tvNode.GetDomElement()._internal.ContextMenuItem)});return items};this.GetAllChildren=function(){var items=[];Fit.Array.ForEach(tree.GetAllNodes(),function(tvNode){Fit.Array.Add(items,tvNode.GetDomElement()._internal.ContextMenuItem)});return items};this.Focused=function(value){Fit.Validation.ExpectBoolean(value,true);if(Fit.Validation.IsSet(value)===true){prevFocused=Fit.Dom.GetFocused()}return tree.Focused(value)};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){if(me===Fit._internal.ContextMenu.Current)Fit._internal.ContextMenu.Current=null;tree.Dispose();me=tree=prevFocused=detectBoundaries=highlightOnInitKeyStroke=isIe8=onShowing=onShown=onHide=onSelect=null;base()});this.OnShowing=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onShowing,cb)};this.OnShown=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onShown,cb)};this.OnHide=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onHide,cb)};this.OnSelect=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSelect,cb)};function fireEventHandlers(handlers,item){var cancel=false;Fit.Array.ForEach(handlers,function(cb){if(cb(me,item)===false)cancel=true});return!cancel}function getExpandedChild(children,childToIgnore){Fit.Validation.ExpectInstanceArray(children,Fit.Controls.TreeViewNode);Fit.Validation.ExpectInstance(childToIgnore,Fit.Controls.TreeViewNode);var found=null;Fit.Array.ForEach(children,function(c){if(c.Expanded()===true&&c!==childToIgnore){found=c;return false}});return found}function handleViewPortCollision(nodeElm){Fit.Validation.ExpectDomElement(nodeElm);if(nodeElm.getElementsByTagName("ul").length>0){var ul=nodeElm.getElementsByTagName("ul")[0];Fit.Dom.Data(ul,"viewportcollision",null);repaint(function(){var pos=Fit.Dom.GetPosition(ul,true);if(pos!==null&&Fit.Browser.GetViewPortDimensions().Height<pos.Y+ul.offsetHeight)Fit.Dom.Data(ul,"viewportcollision","true")})}}function repaint(f){Fit.Validation.ExpectFunction(f,true);var cb=Fit.Validation.IsSet(f)===true?f:function(){};if(isIe8===false){cb()}else{Fit.Dom.AddClass(tree.GetDomElement(),"FitUi_Non_Existing_ContextMenu_Class");Fit.Dom.RemoveClass(tree.GetDomElement(),"FitUi_Non_Existing_ContextMenu_Class");setTimeout(function(){cb();Fit.Dom.AddClass(tree.GetDomElement(),"FitUi_Non_Existing_ContextMenu_Class");Fit.Dom.RemoveClass(tree.GetDomElement(),"FitUi_Non_Existing_ContextMenu_Class")},0)}}this._internal=this._internal?this._internal:{};this._internal.ExecuteBeforeShowBehaviour=function(){if(fireEventHandlers(onShowing)===false)return false;if(Fit._internal.ContextMenu.Current!==null&&Fit._internal.ContextMenu.Current!==me&&Fit._internal.ContextMenu.Current.IsVisible()===true){Fit._internal.ContextMenu.Current.Hide();Fit._internal.ContextMenu.Current=null}return true};this._internal.ExecuteShowBehaviour=function(x,y){Fit.Validation.ExpectInteger(x,true);Fit.Validation.ExpectInteger(y,true);var pos=Fit.Events.GetPointerState().Coordinates.Document;var posX=Fit.Validation.IsSet(x)===true?x:pos.X;var posY=Fit.Validation.IsSet(y)===true?y:pos.Y;tree.GetDomElement().style.left=posX+"px";tree.GetDomElement().style.top=posY+"px";tree.GetDomElement().style.width="auto";if(me.IsVisible()===false){Fit.Dom.Add(document.body,tree.GetDomElement());Fit._internal.ContextMenu.Current=me}Fit.Array.Recurse(tree.GetChildren(),"GetChildren",function(child){Fit.Dom.Data(child.GetDomElement(),"deep","false");if(child.GetChildren().length>0){if(child.GetParent()!==null)Fit.Dom.Data(child.GetParent().GetDomElement(),"deep","true");else Fit.Dom.Data(child.GetTreeView().GetDomElement().children[0].children[0],"deep","true")}});if(detectBoundaries===true){var treeElm=tree.GetDomElement();Fit.Dom.Data(treeElm,"viewportcollision","false");if(Fit.Browser.GetViewPortDimensions().Height<posY-Fit.Dom.GetScrollPosition(document.body).Y+treeElm.offsetHeight){Fit.Dom.Data(treeElm,"viewportcollision","true");treeElm.style.top=posY-treeElm.offsetHeight+"px"}}me.Focused(true);fireEventHandlers(onShown);Fit._internal.ContextMenu.SkipClickClose=true;setTimeout(function(){Fit._internal.ContextMenu.SkipClickClose=false},0)};init()};Fit.Controls.ContextMenuItem=function(displayTitle,itemValue){Fit.Validation.ExpectString(displayTitle);Fit.Validation.ExpectString(itemValue);var me=this;var node=new Fit.Controls.TreeViewNode(displayTitle,itemValue);function init(){node.GetDomElement()._internal.ContextMenuItem=me}this.Title=function(val){Fit.Validation.ExpectStringValue(val,true);return node.Title(val)};this.Value=function(){return node.Value()};this.Selectable=function(val){Fit.Validation.ExpectBoolean(val,true);return node.Selectable(val)};this.GetDomElement=function(){return node.GetDomElement()};this.AddChild=function(item){Fit.Validation.ExpectInstance(item,Fit.Controls.ContextMenuItem);var tvNode=item.GetDomElement()._internal.Node;node.AddChild(tvNode)};this.RemoveChild=function(item){Fit.Validation.ExpectInstance(item,Fit.Controls.ContextMenuItem);var tvNode=node.GetChild(item.Value());if(tvNode!==null)node.RemoveChild(tvNode)};this.GetChild=function(val,recursive){Fit.Validation.ExpectString(val);Fit.Validation.ExpectBoolean(recursive,true);var tvNode=node.GetChild(val,recursive);if(tvNode===null)return null;return tvNode.GetDomElement()._internal.ContextMenuItem};this.GetChildren=function(){var items=[];Fit.Array.ForEach(node.GetChildren(),function(tvNode){Fit.Array.Add(items,tvNode.GetDomElement()._internal.ContextMenuItem)});return items};this.GetParent=function(){var parent=node.GetParent();return parent!==null?parent.GetDomElement()._internal.ContextMenuItem:null};this.Dispose=function(){node.Dispose();node=null};init()};Fit.Controls.ContextMenu.Item=Fit.Controls.ContextMenuItem;Fit._internal.ContextMenu={};Fit._internal.ContextMenu.SkipClickClose=false;Fit._internal.ContextMenu.Current=null;Fit.Events.OnReady(function(){Fit.Events.AddHandler(document,"click",function(e){if(Fit._internal.ContextMenu.SkipClickClose===true)return;var target=Fit.Events.GetTarget(e);var ctx=Fit._internal.ContextMenu.Current;if(ctx===null||target===ctx.GetDomElement()||Fit.Dom.Contained(ctx.GetDomElement(),target)===true)return;ctx.Hide()})});Fit.Controls.WSContextMenu=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.ContextMenu).Apply(controlId);var me=this;var url=null;var jsonpCallback=null;var dataLoading=false;var onDataLoadedCallback=[];var onRequestHandlers=[];var onResponseHandlers=[];var onPopulatedHandlers=[];function init(){}this.Show=function(x,y){Fit.Validation.ExpectInteger(x,true);Fit.Validation.ExpectInteger(y,true);if(dataLoading===true){onDataLoaded(function(){me.Show(x,y)});return}if(me._internal.ExecuteBeforeShowBehaviour()===false)return;dataLoading=true;getData(function(eventArgs){me.RemoveAllChildren();Fit.Array.ForEach(eventArgs.Children,function(c){me.AddChild(createItemFromJson(c))});me._internal.ExecuteShowBehaviour(x,y);dataLoading=false;fireOnDataLoaded()})};this.Url=function(wsUrl){Fit.Validation.ExpectString(wsUrl,true);if(Fit.Validation.IsSet(wsUrl)===true){url=wsUrl}return url};this.JsonpCallback=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true||val===null){jsonpCallback=val}return jsonpCallback};this.OnRequest=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onRequestHandlers,cb)};this.OnResponse=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onResponseHandlers,cb)};this.OnPopulated=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onPopulatedHandlers,cb)};function getData(cb){Fit.Validation.ExpectFunction(cb);if(url===null)Fit.Validation.ThrowError("Unable to get data, no WebService URL has been specified");var request=null;if(jsonpCallback!==null){request=new Fit.Http.JsonpRequest(url,jsonpCallback)}else{request=new Fit.Http.JsonRequest(url)}var eventArgs={Sender:null,Request:null,Children:null};eventArgs.Sender=me;eventArgs.Request=request;if(fireEventHandlers(onRequestHandlers,eventArgs)===false)return;if(eventArgs.Request!==request){Fit.Validation.ExpectInstance(eventArgs.Request,Fit.Http.Request);request=eventArgs.Request}var onSuccess=function(children){eventArgs.Children=children instanceof Array?children:[];fireEventHandlers(onResponseHandlers,eventArgs);cb(eventArgs);fireEventHandlers(onPopulatedHandlers,eventArgs)};var onFailure=function(httpStatusCode){Fit.Validation.ThrowError("Unable to load data for context menu - request failed with HTTP Status Code "+httpStatusCode)};if(Fit.Core.InstanceOf(request,Fit.Http.JsonpRequest)===false){request.OnSuccess(function(req){var children=request.GetResponseJson();onSuccess(children)});request.OnFailure(function(req){onFailure(request.GetHttpStatus())})}else{request.OnSuccess(function(req){var children=req.GetResponse();onSuccess(children)});request.OnTimeout(function(){onFailure("UNKNOWN (JSONP)")})}request.Start()}function onDataLoaded(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onDataLoadedCallback,cb)}function fireOnDataLoaded(){var orgOnDataLoadedCallback=onDataLoadedCallback;onDataLoadedCallback=[];Fit.Array.ForEach(orgOnDataLoadedCallback,function(cb){cb()})}function createItemFromJson(jsonNode){Fit.Validation.ExpectIsSet(jsonNode);var item=new Fit.Controls.ContextMenuItem(jsonNode.Title?jsonNode.Title:jsonNode.Value,jsonNode.Value);if(jsonNode.Selectable!==undefined)item.Selectable(jsonNode.Selectable===true);if(jsonNode.Children instanceof Array){Fit.Array.ForEach(jsonNode.Children,function(c){item.AddChild(createItemFromJson(c))})}return item}function fireEventHandlers(handlers,eventArgs){var cancel=false;Fit.Array.ForEach(handlers,function(cb){if(cb(me,eventArgs)===false)cancel=true});return!cancel}init()};Fit.Controls.DatePicker=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.ControlBase).Apply(ctlId);var me=this;var input=null;var inputTime=null;var icon=null;var orgVal=null;var preVal="";var prevTimeVal="";var locale="en";var localeEnforced=false;var format="MM/DD/YYYY";var formatEnforced=false;var placeholderDate=null;var placeholderTime=null;var weeks=false;var jquery=undefined;var datepicker=null;var datepickerElm=null;var datePickerYears="c-10:c+10";var datepickerDate=null;var startDate=null;var selectWeek=false;var middleOfWeek=null;var open=false;var focused=false;var restoreView=false;var updateCalConf=true;var detectBoundaries=false;var detectBoundariesRelToViewPort=false;var isMobile=Fit.Device.OptimizeForTouch===true&&Fit._internal.Controls.DatePicker.UseNativePickerOnTouch===true;var inputMobile=null;var inputTimeMobile=null;function init(){input=document.createElement("input");input.type="text";input.autocomplete="off";input.spellcheck=false;input.placeholder=getDatePlaceholder();input.tabIndex=isMobile===true?-1:0;input._focus=input.focus;input.focus=function(){if(Fit.Device.OptimizeForTouch===true&&me.TriggerIcon()===true){icon.focus()}else{input._focus()}};input.onkeydown=function(e){var ev=Fit.Events.GetEvent(e);if(ev.keyCode===40){me.Show()}};input.onkeyup=function(){var curDateTime=me.Date();if(input.value!==""&&curDateTime===null)return;if(selectWeek===true){middleOfWeek=getMiddleOfWeek(curDateTime);if(selectFirstDayOfWeek()===true){return}}var curDateStr=curDateTime!==null?Fit.Date.Format(curDateTime,me.Format()):"";if(curDateStr!==preVal){if(input.value===""&&open===true){restoreView=true;me.Hide();me.Show();restoreView=false}preVal=curDateStr;me._internal.FireOnChange()}};input.onchange=function(){if(me===null){return}input.onkeyup()};input.onpaste=function(){setTimeout(function(){input.onkeyup();if(open===true){me.Hide();me.Show()}startDate=null},0)};input.onclick=function(){if(Fit.Device.OptimizeForTouch===false||me.TriggerIcon()===false){me.Show()}};me._internal.FireOnFocus=Fit.Core.CreateOverride(me._internal.FireOnFocus,function(){if(focused===false){focused=true;base()}});me._internal.FireOnBlur=Fit.Core.CreateOverride(me._internal.FireOnBlur,function(){var pointerState=Fit.Events.GetPointerState();var userAction=pointerState.Buttons.Primary===true||pointerState.Buttons.Touch===true;if(open===true&&userAction===true){return}focused=false;base()});input.onblur=function(){if(me===null){return}if(open===true)return;if(input.value!=="")input.value=preVal};me.OnBlur(function(sender){if(input.value===""&&inputTime!==null){inputTime.value="";prevTimeVal="00:00"}if(input.value!==""&&inputTime!==null&&inputTime.value===""){inputTime.value="00:00";prevTimeVal="00:00"}if(open===true){me.Hide()}});me._internal.AddDomElement(input);me.AddCssClass("FitUiControlDatePicker");icon=document.createElement("span");icon.className="fa fa-calendar";icon.style.outline="none";icon.tabIndex=-1;icon.onclick=function(e){me.Show();if(me.TriggerIcon()===false){input._focus()}};me._internal.AddDomElement(icon);me._internal.Data("weeks","false");me._internal.Data("time","false");if(isMobile===true){inputMobile=document.createElement("input");inputMobile.type="date";inputMobile.onchange=function(){if(inputMobile.valueAsDate!==null)input.value=Fit.Date.Format(inputMobile.valueAsDate,me.Format());else input.value="";input.onchange()};me.OnChange(function(sender){if(me.Value()===""&&datepickerDate!==null){selectDateInMobileDatePicker(datepickerDate)}});if(Fit.Device.HasMouse===true){inputMobile.onmousedown=function(e){me.Show()}}me._internal.AddDomElement(inputMobile)}Fit.Internationalization.OnLocaleChanged(localize);localize()}this.Focused=function(focus){Fit.Validation.ExpectBoolean(focus,true);if(Fit.Validation.IsSet(focus)===true){if(focus===true&&me.Focused()===false){if(inputMobile===null){input._focus()}else{inputMobile.focus()}}else if(focus===false&&me.Focused()===true){Fit.Dom.GetFocused().blur()}}var hasFocus=Fit.Array.Contains([icon,input,inputTime,inputMobile,inputTimeMobile],Fit.Dom.GetFocused())===true;if(hasFocus===false&&isMobile===false){var calendarWidget=datepickerElm;hasFocus=calendarWidget!==null&&calendarWidget.style.display==="block"&&calendarWidget._associatedFitUiControl===me.GetId()}return hasFocus};this.CalendarStartDate=function(val){Fit.Validation.ExpectDate(val,true);if(val!==undefined&&val!==datepickerDate){datepickerDate=val;var applyDate=val||new Date;if(isMobile===false){var yearToday=(new Date).getFullYear();var yearsApart=Math.abs(yearToday-applyDate.getFullYear());var yearRange=yearsApart<10?10:yearsApart;datePickerYears="c-"+yearRange+":c+"+yearRange;if(open===true){updateCalConf=true;me.Hide();me.Show()}}else{if(me.Value()===""){selectDateInMobileDatePicker(applyDate)}}}return datepickerDate};this.Value=function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){if(selectWeek===true&&val!==""){var curDate=getDateFromString(val+(val.indexOf(":")===-1?" 00:00":""),inputTime!==null);var startOfWeek=curDate&&getStartOfWeek(curDate);if(curDate!==null&&curDate.getTime()!==startOfWeek.getTime()){val=Fit.Date.Format(startOfWeek,"YYYY-MM-DD"+(inputTime!==null?" hh:mm":""))}}var fireOnChange=me.Value()!==val;var wasOpen=open;if(wasOpen===true){restoreView=true;me.Hide()}if(val!==""){if(val.indexOf(":")===-1)val+=" 00:00";var date=Fit.Date.Parse(val,"YYYY-MM-DD hh:mm");date.setSeconds(0);date.setMilliseconds(0);input.value=Fit.Date.Format(date,me.Format());preVal=input.value;if(preserveDirtyState!==true){orgVal=date}if(inputTime!==null){inputTime.value=Fit.Date.Format(date,"hh:mm");prevTimeVal=inputTime.value}if(inputMobile!==null)inputMobile.valueAsDate=new Date(Date.UTC(date.getFullYear(),date.getMonth(),date.getDate()));if(inputTimeMobile!==null)inputTimeMobile.value=inputTime.value;if(selectWeek===true){middleOfWeek=getMiddleOfWeek(date)}}else{input.value="";preVal="";if(preserveDirtyState!==true){orgVal=null}if(inputTime!==null){inputTime.value="";prevTimeVal="00:00"}if(inputMobile!==null)inputMobile.valueAsDate=null;if(inputTimeMobile!==null)inputTimeMobile.value="";if(selectWeek===true){middleOfWeek=null}}if(wasOpen===true){me.Show();restoreView=false}if(fireOnChange===true)me._internal.FireOnChange()}if(input.value==="")return"";try{var value=input.value+(inputTime!==null?" "+(inputTime.value!==""?inputTime.value:"00:00"):"");var dtFormat=me.Format()+(value.indexOf(":")>-1?" hh:mm":"");var d=Fit.Date.Parse(value,dtFormat);return Fit.Date.Format(d,"YYYY-MM-DD"+(value.indexOf(":")>-1?" hh:mm":""))}catch(err){}return""};this.UserValue=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){var curDate=input.value;var curTime=inputTime!==null?inputTime.value:null;var onChangeFired=false;var datePortion=val;var timePortion=null;if(inputTime!==null&&val.indexOf(" ")!==-1){datePortion=val.substring(0,val.indexOf(" "));timePortion=val.substring(val.indexOf(" ")+1)}if(val===""&&inputTime!==null){timePortion=""}input.value=datePortion;if(inputTime!==null){inputTime.value=timePortion!==null?timePortion:"";if(curTime!==inputTime.value){inputTime.onchange();onChangeFired=true}}if(onChangeFired===false&&curDate!==input.value){input.onchange()}}return input.value+(inputTime!==null&&inputTime.value!==""?" "+inputTime.value:"")};this.IsDirty=function(){if(inputTime!==null){return Fit.Core.IsEqual(orgVal,me.Date())===false}else{var curDate=me.Date();if(orgVal===null&&curDate!==null||orgVal!==null&&curDate===null)return true;else if(orgVal===null&&curDate===null)return false;else return Fit.Date.Format(orgVal,"YYYY-MM-DD")!==Fit.Date.Format(me.Date(),"YYYY-MM-DD")}};this.Clear=function(){me.Value("")};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){if(datepicker!==null){me.Hide();datepicker.datepicker("destroy")}Fit.Internationalization.RemoveOnLocaleChanged(localize);me=input=inputTime=icon=orgVal=preVal=prevTimeVal=locale=localeEnforced=format=formatEnforced=placeholderDate=placeholderTime=weeks=jquery=datepicker=datepickerElm=startDate=selectWeek=middleOfWeek=open=focused=restoreView=updateCalConf=detectBoundaries=detectBoundariesRelToViewPort=isMobile=inputMobile=inputTimeMobile=null;base()});this.Date=function(val){Fit.Validation.ExpectDate(val,true);if(val!==undefined){if(val!==null)me.Value(Fit.Date.Format(val,"YYYY-MM-DD hh:mm"));else me.Clear()}var value=me.Value();var date=getDateFromString(value,inputTime!==null);return date};this.GetText=function(){var date=me.Date();return date!==null?Fit.Date.Format(date,me.Format()+(inputTime!==null?" hh:mm":"")):""};this.Locale=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){localeEnforced=true;setLocale(val);if(selectWeek===true){selectFirstDayOfWeek(middleOfWeek)}}return locale};this.Format=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){formatEnforced=true;setFormat(val)}return format};this.DatePlaceholder=function(val){Fit.Validation.ExpectString(val,true);if(val!==undefined){placeholderDate=val;input.placeholder=getDatePlaceholder()}return placeholderDate};this.TimePlaceholder=function(val){Fit.Validation.ExpectString(val,true);if(val!==undefined){placeholderTime=val;if(inputTime!==null)inputTime.placeholder=getTimePlaceholder()}return placeholderTime};this.TriggerIcon=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){icon.style.opacity=val===false?"0":""}return icon.style.opacity===""};this.SelectWeek=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val!==selectWeek){var wasOpen=open;if(wasOpen===true){restoreView=true;me.Hide()}middleOfWeek=val===true?getMiddleOfWeek(me.Date()):null;selectWeek=val;if(val===true){selectFirstDayOfWeek()}if(wasOpen===true){me.Show();restoreView=false}}}return selectWeek};this.WeekNumbers=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){var wasOpen=open;if(wasOpen===true){restoreView=true;me.Hide()}weeks=val;updateCalConf=true;if(wasOpen===true){me.Show();restoreView=false}me._internal.Data("weeks",val.toString())}return weeks};this.Time=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&inputTime===null){prevTimeVal="00:00";inputTime=document.createElement("input");inputTime.type="text";inputTime.autocomplete="off";inputTime.spellcheck=false;inputTime.placeholder=getTimePlaceholder();inputTime.value=me.Date()!==null?"00:00":"";inputTime.tabIndex=isMobile===true?-1:0;if(me.Date()!==null&&orgVal!==null){inputTime.value=Fit.Date.Format(orgVal,"hh:mm");prevTimeVal=inputTime.value}inputTime.onkeydown=function(e){var ev=Fit.Events.GetEvent(e);var mod=Fit.Events.GetModifierKeys();if(ev.keyCode===9||ev.keyCode===8||ev.keyCode===37||ev.keyCode===39||ev.keyCode===46||mod.Ctrl===true||mod.Meta===true)return;var tv=inputTime.value;var isColon=ev.keyCode===186||mod.Shift===true&&ev.keyCode===190;var valid=isColon===true||ev.keyCode>=48&&ev.keyCode<=58||ev.keyCode>=96&&ev.keyCode<=105;if(isColon===true&&(tv.length===0||tv.substring(tv.length-1)===":")){valid=false}if(valid===false){Fit.Events.PreventDefault(ev);return}};inputTime.onkeyup=function(e){if(e!==null){var ev=Fit.Events.GetEvent(e);if(inputTime.value.length===2&&inputTime.value.substring(1)!==":"&&ev.keyCode!==8&&ev.keyCode!==46){inputTime.value+=":";return}}var dt=null;try{dt=Fit.Date.Parse(inputTime.value!==""?inputTime.value:"00:00","hh:mm")}catch(err){}if(dt===null)return;var newVal=Fit.Date.Format(dt,"hh:mm");if(newVal!==prevTimeVal){prevTimeVal=newVal;if(input.value!=="")me._internal.FireOnChange()}};inputTime.onchange=function(){if(me===null){return}inputTime.onkeyup(null)};inputTime.onpaste=function(){setTimeout(function(){inputTime.onkeyup(null)},0)};inputTime.onblur=function(){if(me===null){return}if(inputTime.value===""){inputTime.value=input.value!==""?"00:00":"";prevTimeVal="00:00"}else{inputTime.value=prevTimeVal}};Fit.Dom.InsertAfter(input,inputTime);if(isMobile===true&&Fit.Device.HasMouse===false){inputTimeMobile=document.createElement("input");inputTimeMobile.type="time";inputTimeMobile.onchange=function(){if(inputTimeMobile.value===""&&inputMobile.value!=="")inputTimeMobile.value="00:00";inputTime.value=inputTimeMobile.value;inputTime.onchange()};me._internal.AddDomElement(inputTimeMobile)}me._internal.FireOnChange()}else if(val===false&&inputTime!==null){Fit.Dom.Remove(inputTime);if(inputTimeMobile!==null){Fit.Dom.Remove(inputTimeMobile)}inputTime=null;inputTimeMobile=null;prevTimeVal="";me._internal.FireOnChange()}me._internal.Data("time",(inputTime!==null).toString())}return inputTime!==null};this.DetectBoundaries=function(val,relativeToViewport){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(relativeToViewport,true);if(Fit.Validation.IsSet(val)===true){detectBoundaries=val;detectBoundariesRelToViewPort=val===true&&relativeToViewport===true}return detectBoundaries};this.Show=function(){if(isMobile===false){initializeOnDemand(function(){if(Fit.Dom.IsVisible(me.GetDomElement())===true){var focused=Fit.Dom.GetFocused();datepicker.datepicker("show");var calendarWidget=datepickerElm;calendarWidget._associatedFitUiControl=me.GetId();Fit.Dom.Data(calendarWidget,"disable-light-dismiss","true");Fit.Dom.Data(calendarWidget,"select-week",selectWeek?"true":"false");moveCalenderWidgetLocally();if(focused===inputTime)inputTime.focus()}})}else{if(inputMobile.showPicker!==undefined){inputMobile.focus();inputMobile.showPicker()}else{me.Focused(false);me.Focused(true)}}};this.Hide=function(){if(isMobile===false){if(datepicker!==null)datepicker.datepicker("hide")}else{me.Focused(false)}};this.GetLocales=function(){var locales=[];Fit.Array.ForEach(getLocales(),function(locale){if(locale==="")return;Fit.Array.Add(locales,locale)});return locales};function initializeOnDemand(cb){Fit.Validation.ExpectFunction(cb);if(datepicker!==null){cb();return}jquery=Fit._internal.Controls.DatePicker.jQuery;if(jquery===undefined){jquery=null;Fit._internal.Controls.DatePicker.jQuery=null;Fit.Loader.ExecuteScript(Fit.GetUrl()+"/Resources/JqueryUI-1.11.4.custom/external/jquery/jquery.js?cacheKey="+Fit.GetVersion().Version,function(src){jquery=$;Fit._internal.Controls.DatePicker.jQuery=$;$.noConflict(true);Fit.Loader.ExecuteScript(Fit.GetUrl()+"/Resources/JqueryUI-1.11.4.custom/jquery-ui.js?cacheKey="+Fit.GetVersion().Version,function(src){if(me===null)return;createDatePicker();cb()},null,{jQuery:jquery,$:jquery})})}else if(jquery&&jquery.datepicker){createDatePicker();cb()}}function getDateFromString(value,includeTime){Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(includeTime);var date=null;if(value!==""){try{date=Fit.Date.Parse(value,"YYYY-MM-DD"+(value.indexOf(":")!==-1?" hh:mm":""))}catch(err){}}if(date!==null){if(includeTime===false){date.setHours(0);date.setMinutes(0)}date.setSeconds(0);date.setMilliseconds(0)}return date}function createDatePicker(){var jq=jquery;datepicker=jq(input).datepicker({showOn:"none",showAnim:false,showWeek:weeks,changeMonth:navigator.platform.toLowerCase().indexOf("iphone")===-1?true:false,changeYear:navigator.platform.toLowerCase().indexOf("iphone")===-1?true:false,dateFormat:getJqueryUiDatePickerFormat(me.Format()),defaultDate:null,onChangeMonthYear:function(year,month,dp){input.focus();if(open===true){try{startDate=Fit.Date.Parse(year+"-"+month+"-"+"01","YYYY-MM-DD")}catch(err){}}},onSelect:function(dateText,dp){startDate=null;input.focus();input.onchange()},beforeShow:function(elm,dp){datepickerElm=dp.dpDiv[0]||null;if(datepicker.jq.datepicker.regional[locale]===null)return false;if(datepicker.jq.datepicker.regional[locale]===undefined){datepicker.jq.datepicker.regional[locale]=null;Fit.Loader.ExecuteScript(Fit.GetUrl()+"/Resources/JqueryUI-1.11.4.custom/i18n/datepicker-"+locale+".js?cacheKey="+Fit.GetVersion().Version,function(src){if(me===null){return}if(datepicker.jq.datepicker.regional[locale]){me.Show()}},null,{jQuery:datepicker.jq,$:datepicker.jq});return false}jquery(dp.dpDiv).attr("tabindex","-1");var val=me.Value();var actualValue=input.value;if(updateCalConf===true){updateCalConf=false;datepicker.datepicker("option",datepicker.jq.datepicker.regional[locale]);datepicker.datepicker("option","dateFormat",getJqueryUiDatePickerFormat(me.Format()));datepicker.datepicker("option","showWeek",weeks);datepicker.datepicker("option","yearRange",datePickerYears);datepicker.datepicker("option","showOtherMonths",true);datepicker.datepicker("option","selectOtherMonths",true)}if(me.Value()===""&&datepickerDate!==null){setTimeout(function(){var year=parseInt(Fit.Date.Format(datepickerDate,"YYYY"),10);var month=parseInt(Fit.Date.Format(datepickerDate,"M"),10);selectYearMonthInCalendarWidget(year,month)},0)}if(startDate!==null&&restoreView===true){setTimeout(function(){var year=parseInt(Fit.Date.Format(startDate,"YYYY"),10);var month=parseInt(Fit.Date.Format(startDate,"M"),10);selectYearMonthInCalendarWidget(year,month)},0)}open=true;if(val===""&&actualValue!==""&&input.value===""){input.value=actualValue}else if(val!==me.Value()){me._internal.ExecuteWithNoOnChange(function(){var middleOfWeekBefore=middleOfWeek;me.Value(val);middleOfWeek=middleOfWeekBefore})}},onClose:function(dateText,dp){open=false;moveCalenderWidgetGlobally();input.onblur();if(focused===true&&Fit.Dom.GetFocused()!==input&&Fit.Dom.GetFocused()!==icon){me._internal.FireOnBlur()}}});datepicker.jq=jq}function moveCalenderWidgetLocally(){if(me._internal.ReduceDocumentRootPollution!==true&&Fit._internal.ControlBase.ReduceDocumentRootPollution!==true){return}var selfDom=me.GetDomElement();var calendarWidget=datepickerElm;Fit.Dom.InsertAfter(selfDom,calendarWidget);var below=true;var forceFixed=false;var overflowParent=detectBoundariesRelToViewPort===false?Fit.Dom.GetOverflowingParent(selfDom):null;var offsetParent=selfDom.offsetParent;if(overflowParent!==null&&overflowParent!==offsetParent&&Fit.Dom.Contained(overflowParent,offsetParent)===false){forceFixed=true}if(detectBoundaries===true){var visualBoundaryBottomPosition=overflowParent!==null&&forceFixed===false?Fit.Dom.GetBoundingPosition(overflowParent).Y+overflowParent.offsetHeight:Fit.Browser.GetViewPortDimensions().Height;var controlBottomPosition=Fit.Dom.GetBoundingPosition(selfDom).Y+selfDom.offsetHeight;var spaceBelowControl=visualBoundaryBottomPosition-controlBottomPosition;var verticalScrollbarHeight=overflowParent!==null&&detectBoundariesRelToViewPort===false&&forceFixed===false?Fit.Dom.GetScrollBars(overflowParent).Horizontal.Size:0;below=spaceBelowControl>=calendarWidget.offsetHeight+verticalScrollbarHeight}if(below===true){if(detectBoundariesRelToViewPort===true||forceFixed===true){calendarWidget.style.position="fixed";calendarWidget.style.left=Fit.Dom.GetPosition(selfDom,true).X+"px";calendarWidget.style.top=Fit.Dom.GetPosition(selfDom,true).Y+selfDom.offsetHeight+"px"}else{calendarWidget.style.position="absolute";calendarWidget.style.left=selfDom.offsetLeft+"px";calendarWidget.style.top=selfDom.offsetTop+selfDom.offsetHeight+"px"}}else{if(detectBoundariesRelToViewPort===true||forceFixed===true){calendarWidget.style.position="fixed";calendarWidget.style.left=Fit.Dom.GetPosition(selfDom,true).X+"px";calendarWidget.style.top=Fit.Dom.GetPosition(selfDom,true).Y-calendarWidget.offsetHeight+"px"}else{calendarWidget.style.position="absolute";calendarWidget.style.left=selfDom.offsetLeft+"px";calendarWidget.style.top=selfDom.offsetTop-calendarWidget.offsetHeight+"px"}}}function moveCalenderWidgetGlobally(){if(me._internal.ReduceDocumentRootPollution!==true&&Fit._internal.ControlBase.ReduceDocumentRootPollution!==true){return}var calendarWidget=datepickerElm;Fit.Dom.Add(document.body,calendarWidget);calendarWidget.style.position="";calendarWidget.style.left="";calendarWidget.style.top=""}function getJqueryUiDatePickerFormat(){return me.Format().replace(/D/g,"d").replace(/M/g,"m").replace(/YY/g,"y")}function getFitUiDateFormat(jqueryFormat){Fit.Validation.ExpectString(jqueryFormat);return jqueryFormat.replace(/d/g,"D").replace(/m/g,"M").replace(/y/g,"YY")}function getJqueryDateFormatFromLocale(lc){Fit.Validation.ExpectString(lc);var locales=getLocales();if(locales[lc]!==undefined)return locales[lc];return null}function selectYearMonthInCalendarWidget(year,month){Fit.Validation.ExpectInteger(year);Fit.Validation.ExpectInteger(month);var yearPicker=document.querySelector("select.fitui-datepicker-year");yearPicker.value=year.toString();datepicker.jq(yearPicker).trigger("change");var monthPicker=document.querySelector("select.fitui-datepicker-month");monthPicker.value=(month-1).toString();datepicker.jq(monthPicker).trigger("change")}function selectDateInMobileDatePicker(date){Fit.Validation.ExpectDate(date);var focusFix=Fit.Dom.GetFocused()===inputMobile;if(focusFix){input._focus()}inputMobile.valueAsDate=date;if(focusFix){inputMobile.focus()}}function getMiddleOfWeek(date){Fit.Validation.ExpectDate(date,true);if(!date){return null}var firstDay=getJqueryDateFormatFromLocale(locale).firstDay;var day=date.getDay();if(firstDay===0){var daysFromWednesday=3-day;var middle=new Date(date.getTime());middle.setDate(date.getDate()+daysFromWednesday);return middle}else if(firstDay===1){day=day===0?6:day-1;var daysFromWednesday=2-day;var middle=new Date(date.getTime());middle.setDate(date.getDate()+daysFromWednesday);return middle}else if(firstDay===6){day=day===0?1:day===6?0:day+1;var daysFromWednesday=4-day;var middle=new Date(date.getTime());middle.setDate(date.getDate()+daysFromWednesday);return middle}throw"Unable to determine middle of week - locale with unsupported calendar"}function getStartOfWeek(date){Fit.Validation.ExpectDate(date);var firstDay=getJqueryDateFormatFromLocale(locale).firstDay;if(date.getDay()!==firstDay){var selectedDay=date.getDay();var daysFromWeekStart=-1;if(firstDay===0){daysFromWeekStart=selectedDay}else if(firstDay===1){daysFromWeekStart=date.getDay()===0?6:date.getDay()-1}else if(firstDay===6){daysFromWeekStart=date.getDay()===6?0:date.getDay()+1}if(daysFromWeekStart===-1){throw"Unable to determine number of days from week start - locale with unsupported calendar"}var weekStart=new Date(date.getTime()-daysFromWeekStart*(24*60*60*1e3));weekStart.setHours(date.getHours());weekStart.setMinutes(date.getMinutes());return weekStart}else{return new Date(date.getTime())}}function selectFirstDayOfWeek(forceDate){Fit.Validation.ExpectDate(forceDate,true);var curDateTime=forceDate||me.Date();var startOfWeek=curDateTime&&getStartOfWeek(curDateTime);if(curDateTime!==null&&curDateTime.getTime()!==startOfWeek.getTime()){var selectWeekStart=function(){var middleOfWeekBefore=middleOfWeek;me.Date(startOfWeek);middleOfWeek=middleOfWeekBefore};if(Fit.Date.Format(startOfWeek,me.Format())===preVal){me._internal.ExecuteWithNoOnChange(function(){selectWeekStart()})}else{selectWeekStart()}return true}return false}function getLocales(){return{"":{format:"mm/dd/yy",firstDay:0},en:{format:"mm/dd/yy",firstDay:0},"en-US":{format:"mm/dd/yy",firstDay:0},af:{format:"dd/mm/yy",firstDay:1},"ar-DZ":{format:"dd/mm/yy",firstDay:6},ar:{format:"dd/mm/yy",firstDay:0},az:{format:"dd.mm.yy",firstDay:1},be:{format:"dd.mm.yy",firstDay:1},bg:{format:"dd.mm.yy",firstDay:1},bs:{format:"dd.mm.yy",firstDay:1},ca:{format:"dd/mm/yy",firstDay:1},cs:{format:"dd.mm.yy",firstDay:1},"cy-GB":{format:"dd/mm/yy",firstDay:1},da:{format:"dd-mm-yy",firstDay:1},de:{format:"dd.mm.yy",firstDay:1},el:{format:"dd/mm/yy",firstDay:1},"en-AU":{format:"dd/mm/yy",firstDay:1},"en-GB":{format:"dd/mm/yy",firstDay:1},"en-NZ":{format:"dd/mm/yy",firstDay:1},eo:{format:"dd/mm/yy",firstDay:0},es:{format:"dd/mm/yy",firstDay:1},et:{format:"dd.mm.yy",firstDay:1},eu:{format:"yy-mm-dd",firstDay:1},fa:{format:"yy/mm/dd",firstDay:6},fi:{format:"d.m.yy",firstDay:1},fo:{format:"dd-mm-yy",firstDay:1},"fr-CA":{format:"yy-mm-dd",firstDay:0},"fr-CH":{format:"dd.mm.yy",firstDay:1},fr:{format:"dd/mm/yy",firstDay:1},gl:{format:"dd/mm/yy",firstDay:1},he:{format:"dd/mm/yy",firstDay:0},hi:{format:"dd/mm/yy",firstDay:1},hr:{format:"dd.mm.yy.",firstDay:1},hu:{format:"yy.mm.dd.",firstDay:1},hy:{format:"dd.mm.yy",firstDay:1},id:{format:"dd/mm/yy",firstDay:0},is:{format:"dd.mm.yy",firstDay:0},"it-CH":{format:"dd.mm.yy",firstDay:1},it:{format:"dd/mm/yy",firstDay:1},ja:{format:"yy/mm/dd",firstDay:0},ka:{format:"dd-mm-yy",firstDay:1},kk:{format:"dd.mm.yy",firstDay:1},km:{format:"dd-mm-yy",firstDay:1},ko:{format:"yy. m. d.",firstDay:0},ky:{format:"dd.mm.yy",firstDay:1},lb:{format:"dd.mm.yy",firstDay:1},lt:{format:"yy-mm-dd",firstDay:1},lv:{format:"dd.mm.yy",firstDay:1},mk:{format:"dd.mm.yy",firstDay:1},ml:{format:"dd/mm/yy",firstDay:1},ms:{format:"dd/mm/yy",firstDay:0},nb:{format:"dd.mm.yy",firstDay:1},"nl-BE":{format:"dd/mm/yy",firstDay:1},nl:{format:"dd-mm-yy",firstDay:1},nn:{format:"dd.mm.yy",firstDay:1},no:{format:"dd.mm.yy",firstDay:1},pl:{format:"dd.mm.yy",firstDay:1},"pt-BR":{format:"dd/mm/yy",firstDay:0},pt:{format:"dd/mm/yy",firstDay:0},rm:{format:"dd/mm/yy",firstDay:1},ro:{format:"dd.mm.yy",firstDay:1},ru:{format:"dd.mm.yy",firstDay:1},sk:{format:"dd.mm.yy",firstDay:1},sl:{format:"dd.mm.yy",firstDay:1},sq:{format:"dd.mm.yy",firstDay:1},"sr-SR":{format:"dd.mm.yy",firstDay:1},sr:{format:"dd.mm.yy",firstDay:1},sv:{format:"yy-mm-dd",firstDay:1},ta:{format:"dd/mm/yy",firstDay:1},th:{format:"dd/mm/yy",firstDay:0},tj:{format:"dd.mm.yy",firstDay:1},tr:{format:"dd.mm.yy",firstDay:1},uk:{format:"dd.mm.yy",firstDay:1},vi:{format:"dd/mm/yy",firstDay:0},"zh-CN":{format:"yy-mm-dd",firstDay:1},"zh-HK":{format:"dd-mm-yy",firstDay:0},"zh-TW":{format:"yy/mm/dd",firstDay:1}}}function getDatePlaceholder(){return placeholderDate!==null?placeholderDate:Fit.Date.Format(new Date,format)}function getTimePlaceholder(){return placeholderTime!==null?placeholderTime:Fit.Date.Format(new Date,"hh:mm")}function setLocale(val){Fit.Validation.ExpectString(val);var loc=getJqueryDateFormatFromLocale(val);if(loc===null)Fit.Validation.ThrowError("Unknown locale '"+val+"'");var newFormat=loc.format;var wasOpen=open;if(wasOpen===true){restoreView=true;me.Hide()}locale=val;updateCalConf=true;if(formatEnforced===false){setFormat(getFitUiDateFormat(newFormat))}if(wasOpen===true){me.Show();restoreView=false}}function setFormat(val){Fit.Validation.ExpectString(val);try{var date=Fit.Date.Parse("2016-06-24 00:00:00","YYYY-MM-DD hh:mm:ss");var dateStr=Fit.Date.Format(date,val+" hh:mm:ss");var parsed=Fit.Date.Parse(dateStr,val+" hh:mm:ss");if(date.getTime()!==parsed.getTime())throw"Invalid"}catch(err){Fit.Validation.ThrowError("Invalid date format '"+val+"'")}var wasOpen=open;if(wasOpen===true){restoreView=true;me.Hide()}var curDate=me.Date();format=val;updateCalConf=true;input.placeholder=getDatePlaceholder();me._internal.ExecuteWithNoOnChange(function(){if(curDate!==null){input.value=Fit.Date.Format(curDate,format);preVal=input.value}});if(wasOpen===true){me.Show();restoreView=false}}function localize(){if(localeEnforced===true)return;var newLocale=Fit.Internationalization.Locale();var key=null;if(newLocale.indexOf("_")!==-1){var info=newLocale.split("_");key=info[0].toLowerCase()+"-"+info[1].toUpperCase()}else{key=newLocale.toLowerCase()}if(Fit.Array.Contains(Fit.Array.GetKeys(getLocales()),key)===true){setLocale(key)}}init()};Fit._internal.Controls.DatePicker={};Fit._internal.Controls.DatePicker.UseNativePickerOnTouch=false;Fit.Controls.Dialog=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.Component).Apply(controlId);var me=this;var dialog=me.GetDomElement();var focusTrapStart=null;var focusTrapEnd=null;var titleContainer=null;var titleText=null;var titleButtons=null;var cmdMaximize=null;var cmdDismiss=null;var content=null;var iframe=null;var resizer=null;var buttons=null;var modal=false;var layer=null;var draggable=null;var suppressPositioning=false;var width=null;var minWidth=null;var maxWidth=null;var height=null;var minHeight=null;var maxHeight=null;var mutationObserverId=-1;var resizeHandlerId=-1;var onDismissHandlers=[];var onCloseHandlers=[];var isClosing=false;function init(){Fit.Dom.AddClass(dialog,"FitUiControl");Fit.Dom.AddClass(dialog,"FitUiControlDialog");Fit.Dom.Data(dialog,"framed","false");Fit.Dom.Data(dialog,"maximized","false");Fit.Dom.Data(dialog,"resizable","false");focusTrapStart=document.createElement("div");focusTrapStart.tabIndex=0;Fit.Dom.Add(dialog,focusTrapStart);focusTrapEnd=document.createElement("div");focusTrapEnd.tabIndex=0;Fit.Dom.Add(dialog,focusTrapEnd);content=createContentElement();Fit.Dom.InsertAfter(focusTrapStart,content);layer=document.createElement("div");Fit.Dom.AddClass(layer,"FitUiControlDialogModalLayer");Fit.Events.AddHandler(dialog,"click",function(e){if(me===null)return;var target=Fit.Events.GetTarget(e);if(buttons!==null&&Fit.Dom.Contained(buttons,target))return;if(cmdMaximize!==null&&(target===cmdMaximize.GetDomElement()||Fit.Dom.Contained(cmdMaximize.GetDomElement(),target)===true)||cmdDismiss!==null&&(target===cmdDismiss.GetDomElement()||Fit.Dom.Contained(cmdDismiss.GetDomElement(),target)===true)){return}if(buttons!==null&&(Fit.Dom.GetFocused()===null||Fit.Dom.Contained(dialog,Fit.Dom.GetFocused())===false))buttons.children[0].focus()});Fit.Events.AddHandler(layer,"click",function(e){if(buttons!==null&&(Fit.Dom.GetFocused()===null||Fit.Dom.Contained(dialog,Fit.Dom.GetFocused())===false))buttons.children[0].focus()});Fit.Events.AddHandler(dialog,"keydown",function(e){var ev=Fit.Events.GetEvent(e);if(modal===true&&ev.keyCode===9){if(ev.shiftKey===true&&Fit.Events.GetTarget(ev)===focusTrapStart){Fit.Events.PreventDefault(ev)}else if(ev.shiftKey===false&&Fit.Events.GetTarget(ev)===focusTrapEnd){Fit.Events.PreventDefault(ev)}}});if(Fit.Browser.IsTouchEnabled()===true){var stopEventIfDialogIsDisposed=function(e){if(me===null){Fit.Events.PreventDefault(e)}};Fit.Events.AddHandler(me.GetDomElement(),"touchstart",stopEventIfDialogIsDisposed);Fit.Events.AddHandler(me.GetDomElement(),"touchend",stopEventIfDialogIsDisposed)}}this.Title=function(val){Fit.Validation.ExpectString(val,true);if(val!==undefined){if(val===null&&titleContainer!==null){if(titleButtons!==null||draggable!==null){Fit.Dom.Text(titleText,"")}else{Fit.Dom.Remove(titleContainer);titleContainer=null;titleText=null;setContentHeight();updatePosition()}}else{if(titleContainer===null){titleContainer=document.createElement("div");Fit.Dom.AddClass(titleContainer,"FitUiControlDialogTitle");Fit.Dom.InsertAfter(focusTrapStart,titleContainer);titleText=document.createElement("div");Fit.Dom.AddClass(titleText,"FitUiControlDialogTitleText");Fit.Dom.Add(titleContainer,titleText)}Fit.Dom.Text(titleText,val);setContentHeight();updatePosition()}}return titleText!==null?Fit.Dom.Text(titleText):null};this.Width=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);var defaultValue={Value:-1,Unit:"px"};if(Fit.Validation.IsSet(val)===true){if(val>-1){width={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};dialog.style.width=width.Value+width.Unit;if(minWidth===null&&me.Resizable()===false){dialog.style.minWidth="0"}if(maxWidth===null&&me.Resizable()===false){dialog.style.maxWidth="none"}}else{width=null;dialog.style.width="";if(minWidth===null){dialog.style.minWidth=""}if(maxWidth===null){dialog.style.maxWidth=""}}updatePosition()}return width!==null?width:defaultValue};this.MinimumWidth=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);var defaultValue={Value:280,Unit:"px"};var defaultValueResizable={Value:15,Unit:"em"};if(Fit.Validation.IsSet(val)===true){if(val>-1){minWidth={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};dialog.style.minWidth=minWidth.Value+minWidth.Unit}else{minWidth=null;dialog.style.minWidth=width!==null&&me.Resizable()===false?"0":""}updatePosition()}if(minWidth===null&&me.Resizable()===true){return defaultValueResizable}return minWidth!==null?minWidth:width!==null?width:defaultValue};this.MaximumWidth=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);var defaultValue={Value:800,Unit:"px"};var defaultValueResizable={Value:100,Unit:"%"};if(Fit.Validation.IsSet(val)===true){if(val>-1){maxWidth={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};dialog.style.maxWidth=maxWidth.Value+maxWidth.Unit}else{maxWidth=null;dialog.style.maxWidth=width!==null&&me.Resizable()===false?"none":""}updatePosition()}if(maxWidth===null&&me.Resizable()===true){return defaultValueResizable}return maxWidth!==null?maxWidth:width!==null?width:defaultValue};this.Height=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);var defaultValue=iframe!==null?{Value:40,Unit:"%"}:{Value:-1,Unit:"px"};if(Fit.Validation.IsSet(val)===true){if(val>-1){height={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};dialog.style.height=height.Value+height.Unit}else{height=null;dialog.style.height=""}setContentHeight();updatePosition()}return height!==null?height:defaultValue};this.MinimumHeight=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);var defaultValue={Value:-1,Unit:"px"};var defaultValueResizable={Value:10,Unit:"em"};if(Fit.Validation.IsSet(val)===true){if(val>-1){minHeight={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};dialog.style.minHeight=minHeight.Value+minHeight.Unit}else{minHeight=null;dialog.style.minHeight=""}setContentHeight();updatePosition()}if(minHeight===null&&me.Resizable()===true){return defaultValueResizable}return minHeight!==null?minHeight:defaultValue};this.MaximumHeight=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);var defaultValue={Value:-1,Unit:"px"};var defaultValueResizable={Value:100,Unit:"%"};if(Fit.Validation.IsSet(val)===true){if(val>-1){maxHeight={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};dialog.style.maxHeight=maxHeight.Value+maxHeight.Unit}else{maxHeight=null;dialog.style.maxHeight=""}setContentHeight();updatePosition()}if(maxHeight===null&&me.Resizable()===true){return defaultValueResizable}return maxHeight!==null?maxHeight:defaultValue};this.Modal=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val!==modal&&me.IsOpen()===true){if(val===true){layer.style.zIndex=dialog.style.zIndex;Fit.Dom.InsertBefore(dialog,layer);if(me.IsOpen()===true){me.BringToFront()}}else{Fit.Dom.Remove(layer)}}modal=val}return modal};this.Content=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){content.innerHTML=val;if(iframe!==null){Fit.Dom.Data(dialog,"framed","false");iframe=null}setContentHeight();updatePosition()}return content.innerHTML};this.GetContentDomElement=function(){return content};this.ContentUrl=function(url,onLoadHandler){Fit.Validation.ExpectString(url,true);Fit.Validation.ExpectFunction(onLoadHandler,true);if(Fit.Validation.IsSet(url)===true){iframe=Fit.Dom.CreateElement("<iframe src='"+url+"' scrolling='yes' frameBorder='0' allowtransparency='true'></iframe>");if(Fit.Validation.IsSet(onLoadHandler)===true){Fit.Events.AddHandler(iframe,"load",function(e){onLoadHandler(me)})}content.innerHTML="";Fit.Dom.Add(content,iframe);Fit.Dom.Data(dialog,"framed","true")}return iframe!==null?iframe.src:null};this.Maximized=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){Fit.Dom.Data(dialog,"maximized",val===true?"true":"false");if(cmdMaximize!==null){if(Fit.Dom.Data(dialog,"maximized")==="true"){cmdMaximize.Icon("compress")}else{cmdMaximize.Icon("expand")}}me._internal.Repaint(function(){var b=Fit.Browser.GetInfo();if(iframe!==null&&b.Name==="Safari"&&b.IsMobile===true){iframe.style.display="none";setTimeout(function(){iframe.style.display=""},0)}})}return Fit.Dom.Data(dialog,"maximized")==="true"};this.Maximizable=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&cmdMaximize===null){cmdMaximize=new Fit.Controls.Button;cmdMaximize.Icon(me.Maximized()===false?"expand":"compress");cmdMaximize.ReturnFocus(true);cmdMaximize.OnClick(function(sender){if(me.Maximized()===false){me.Maximized(true)}else{me.Maximized(false)}});updateTitleButtons()}else if(val===false&&cmdMaximize!==null){cmdMaximize.Dispose();cmdMaximize=null;updateTitleButtons()}}return cmdMaximize!==null};this.Dismissible=function(val,disposeOnDismiss){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(disposeOnDismiss,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&cmdDismiss===null){cmdDismiss=new Fit.Controls.Button;cmdDismiss.Icon("close");cmdDismiss.OnClick(function(sender){var canceled=false;Fit.Array.ForEach(onDismissHandlers,function(cb){if(cb(me)===false){canceled=true;return false}});if(canceled===true){return}if(me!==null){if(disposeOnDismiss===true){me.Dispose()}else{me.Close()}}});updateTitleButtons()}else if(val===false&&cmdDismiss!==null){cmdDismiss.Dispose();cmdDismiss=null;updateTitleButtons()}}return cmdDismiss!==null};this.Draggable=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&draggable===null){if(me.Title()===null){me.Title("")}draggable=new Fit.DragDrop.Draggable(me.GetDomElement(),titleText);draggable.BringToFrontOnActivation(true);draggable.ReturnFocus(true);draggable.OnDragStart(function(elm){if(me.Maximized()===true){return false}suppressPositioning=true})}else if(val===false&&draggable!==null){draggable.Dispose();draggable=null;suppressPositioning=false;if(me.Title()===""){me.Title(null)}updatePosition()}}return draggable!==null};this.Resizable=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&resizer===null){resizer=createResizerElement();Fit.Dom.InsertAfter(content,resizer);Fit.Dom.Data(dialog,"resizable","true")}else if(val===false&&resizer!==null){Fit.Dom.Remove(resizer);resizer=null;Fit.Dom.Data(dialog,"resizable","false");me.Width(me.Width().Value,me.Width().Unit);me.Height(me.Height().Value,me.Height().Unit)}}return resizer!==null};this.Reset=function(){if(draggable!==null){suppressPositioning=false;updatePosition()}if(me.Resizable()===true){me.Width(me.Width().Value,me.Width().Unit);me.Height(me.Height().Value,me.Height().Unit)}};this.AddButton=function(btn){Fit.Validation.ExpectInstance(btn,Fit.Controls.Button);if(buttons===null){buttons=document.createElement("div");Fit.Dom.AddClass(buttons,"FitUiControlDialogButtons");Fit.Dom.InsertBefore(focusTrapEnd,buttons)}Fit.Dom.Add(buttons,btn.GetDomElement());setContentHeight();updatePosition()};this.RemoveButton=function(btn,dispose){Fit.Validation.ExpectInstance(btn,Fit.Controls.Button);Fit.Validation.ExpectBoolean(dispose,true);if(buttons===null)return;Fit.Array.ForEach(buttons.children,function(elm){if(elm===btn.GetDomElement()){if(dispose===true){btn.Dispose()}else{Fit.Dom.Remove(btn.GetDomElement())}if(buttons.children.length===0){Fit.Dom.Remove(buttons);buttons=null}setContentHeight();updatePosition();return false}})};this.RemoveAllButtons=function(dispose){Fit.Validation.ExpectBoolean(dispose,true);if(buttons===null)return;Fit.Array.ForEach(Fit.Array.Copy(buttons.children),function(buttonElm){if(dispose===true){buttonElm._internal.Instance.Dispose()}else{Fit.Dom.Remove(buttonElm)}});Fit.Dom.Remove(buttons);buttons=null;setContentHeight();updatePosition()};this.IsOpen=function(){return Fit.Dom.IsRooted(dialog)};this.BringToFront=function(){if(draggable!==null){draggable.BringToFront()}else{Fit.Array.ForEach(document.querySelectorAll("div.FitUiControlDialog"),function(diaElm){var dia=Fit.Controls.Find(diaElm.id);if(dia.Draggable()===true){dialog.style.zIndex=Fit.DragDrop.Draggable.GetNextZindex();return false}})}layer.style.zIndex=dialog.style.zIndex};this.Open=function(renderTarget){Fit.Validation.ExpectDomElement(renderTarget,true);if(me.IsOpen()===true)return;me.BringToFront();if(modal===true){layer.style.zIndex=dialog.style.zIndex;Fit.Dom.Add(renderTarget||document.body,layer)}Fit.Dom.Add(renderTarget||document.body,dialog);setContentHeight();updatePosition();mutationObserverId=Fit.Events.AddMutationObserver(dialog,function(elm){setContentHeight();updatePosition()});resizeHandlerId=Fit.Events.AddHandler(window,"resize",function(e){setContentHeight();updatePosition()})};this.Close=function(){if(me.IsOpen()===false)return;if(isClosing===true)return;var canceled=false;isClosing=true;Fit.Array.ForEach(onCloseHandlers,function(cb){if(cb(me)===false){canceled=true;return false}});isClosing=false;if(canceled===true)return;if(me!==null){Fit.Events.RemoveMutationObserver(mutationObserverId);mutationObserverId=-1;Fit.Events.RemoveHandler(window,resizeHandlerId);resizeHandlerId=-1;Fit.Dom.Remove(dialog);if(layer!==null)Fit.Dom.Remove(layer)}};this.Render=function(toElement){me.Open(toElement)};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){me.Close();if(me===null){return}if(layer!==null){Fit.Dom.Remove(layer)}if(cmdMaximize!==null){cmdMaximize.Dispose()}if(cmdDismiss!==null){cmdDismiss.Dispose()}if(draggable!==null){draggable.Dispose()}if(buttons!==null){Fit.Array.ForEach(Fit.Array.Copy(buttons.children),function(buttonElm){buttonElm._internal.Instance.Dispose()})}if(mutationObserverId!==-1){Fit.Events.RemoveMutationObserver(mutationObserverId)}if(resizeHandlerId!==-1){Fit.Events.RemoveHandler(window,resizeHandlerId)}me=dialog=focusTrapStart=focusTrapEnd=titleContainer=titleText=titleButtons=cmdMaximize=cmdDismiss=content=iframe=resizer=buttons=modal=layer=draggable=suppressPositioning=width=minWidth=maxWidth=height=minHeight=maxHeight=mutationObserverId=resizeHandlerId=onDismissHandlers=onCloseHandlers=isClosing=null;base()});this.OnDismiss=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onDismissHandlers,cb)};this.OnClose=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onCloseHandlers,cb)};this._internal=this._internal?this._internal:{};this._internal.GetLayerElement=function(){return layer};function createContentElement(){var div=document.createElement("div");Fit.Dom.AddClass(div,"FitUiControlDialogContent");return div}function createResizerElement(){var resizer=document.createElement("div");Fit.Dom.AddClass(resizer,"FitUiControlDialogResizer");Fit.Events.AddHandler(resizer,Fit.Browser.IsTouchEnabled()===true?"touchstart":"mousedown",function(e){if(me.Maximized()===true){return}var ev=Fit.Events.GetEvent(e);var focusedBeforeResize=Fit.Dom.GetFocused();var initPos=Fit.Events.GetPointerState().Coordinates.ViewPort;var initDim={Width:me.GetDomElement().offsetWidth,Height:me.GetDomElement().offsetHeight};var moveHandler=null;var releaseHandler=null;var cancelHandler=null;var cleanup=function(){Fit.Events.RemoveHandler(document,moveHandler);Fit.Events.RemoveHandler(document,releaseHandler);if(cancelHandler!==null){Fit.Events.RemoveHandler(document,cancelHandler)}focusedBeforeResize.focus()};moveHandler=Fit.Events.AddHandler(document,Fit.Browser.IsTouchEnabled()===true?"touchmove":"mousemove",{passive:false},function(e){if(me===null){cleanup();return}var ev=Fit.Events.GetEvent(e);var pp=Fit.Events.GetPointerState().Coordinates.ViewPort;var left=pp.X-initPos.X;var top=pp.Y-initPos.Y;if(suppressPositioning===false){left=left*2;top=top*1.3}var newWidth=initDim.Width+left;var newHeight=initDim.Height+top;if(newWidth>0){dialog.style.width=newWidth+"px"}if(newHeight>0){dialog.style.height=newHeight+"px";setContentHeight()}if(newWidth>0||newHeight>0){updatePosition()}Fit.Events.PreventDefault(ev)});releaseHandler=Fit.Events.AddHandler(document,Fit.Browser.IsTouchEnabled()===true?"touchend":"mouseup",function(e){cleanup()});if(Fit.Browser.IsTouchEnabled()===true){cancelHandler=Fit.Events.AddHandler(document,"touchcancel",function(e){cleanup()})}if(ev.type==="touchstart"){Fit.Events.PreventDefault(ev)}});return resizer}function setContentHeight(){if(me.IsOpen()===false)return;content.style.height="";if((buttons!==null||titleContainer!==null)&&(me.Maximized()===true||me.Height().Value!==-1||me.MinimumHeight().Value!==-1||me.MaximumHeight().Value!==-1)){var dh=dialog.getBoundingClientRect().height;var th=titleContainer!==null?titleContainer.getBoundingClientRect().height:0;var bh=buttons!==null?buttons.getBoundingClientRect().height:0;content.style.height=dh-th-bh+"px"}}function updatePosition(){if(suppressPositioning===true)return;if(me.IsOpen()===false)return;var elm=me.GetDomElement();elm.style.left="0px";elm.style.top="0px";var dim=Fit.Browser.GetViewPortDimensions();var offsetTop=(dim.Height-elm.offsetHeight)*.25;var offsetLeft=(dim.Width-elm.offsetWidth)*.5;offsetTop=Math.floor(offsetTop);offsetLeft=Math.floor(offsetLeft);if(offsetTop<0){offsetTop=0}if(offsetLeft<0){offsetLeft=0}elm.style.left=offsetLeft+"px";elm.style.top=offsetTop+"px"}function updateTitleButtons(){if(titleButtons!==null&&cmdMaximize===null&&cmdDismiss===null){Fit.Dom.Remove(titleButtons);titleButtons=null;if(me.Title()===""){me.Title(null)}return}if(titleButtons===null&&(cmdMaximize!==null||cmdDismiss!==null)){if(me.Title()===null)me.Title("");titleButtons=document.createElement("div");Fit.Dom.AddClass(titleButtons,"FitUiControlDialogTitleButtons");Fit.Dom.Add(titleContainer,titleButtons)}if(cmdMaximize!==null){Fit.Dom.Add(titleButtons,cmdMaximize.GetDomElement())}if(cmdDismiss!==null){Fit.Dom.Add(titleButtons,cmdDismiss.GetDomElement())}}init()};Fit.Controls.Dialog._internal={};Fit.Controls.Dialog._internal.BaseDialog=function(content,showCancel,cb){Fit.Validation.ExpectString(content);Fit.Validation.ExpectBoolean(showCancel);Fit.Validation.ExpectFunction(cb,true);var d=new Fit.Controls.Dialog;d.Content(content.replace(/\n/g,"<br>"));d.Modal(true);Fit.Dom.AddClass(d.GetDomElement(),"FitUiControlDialogBase");Fit.Dom.AddClass(d._internal.GetLayerElement(),"FitUiControlDialogBaseModalLayer");var cmdOk=new Fit.Controls.Button;var cmdCancel=null;var localize=function(){var locale=Fit.Internationalization.GetLocale(d);cmdOk.Title(locale.Ok);if(cmdCancel!==null)cmdCancel.Title(locale.Cancel)};Fit.Internationalization.OnLocaleChanged(localize);var dispose=function(){Fit.Internationalization.RemoveOnLocaleChanged(localize);d.Dispose()};cmdOk.Icon("check");cmdOk.Type(Fit.Controls.ButtonType.Success);cmdOk.OnClick(function(sender){dispose();if(Fit.Validation.IsSet(cb)===true)cb(true)});d.AddButton(cmdOk);if(showCancel===true){cmdCancel=new Fit.Controls.Button;cmdCancel.Icon("ban");cmdCancel.Type(Fit.Controls.ButtonType.Danger);cmdCancel.OnClick(function(sender){dispose();if(Fit.Validation.IsSet(cb)===true)cb(false)});d.AddButton(cmdCancel)}localize();return{Dialog:d,ConfirmButton:cmdOk,CancelButton:cmdCancel,Dismiss:function(){dispose()}}};Fit.Controls.Dialog.Alert=function(content,cb){Fit.Validation.ExpectString(content);Fit.Validation.ExpectFunction(cb,true);var baseDialog=Fit.Controls.Dialog._internal.BaseDialog(content,false,function(res){if(Fit.Validation.IsSet(cb)===true)cb()});baseDialog.Dialog.Open();baseDialog.ConfirmButton.Focused(true);var diaApi={Dismiss:function(){baseDialog.Dismiss()},Confirm:function(){baseDialog.ConfirmButton.Click()},Cancel:function(){baseDialog.ConfirmButton.Click()}};return diaApi};Fit.Controls.Dialog.Confirm=function(content,cb){Fit.Validation.ExpectString(content);Fit.Validation.ExpectFunction(cb);var baseDialog=Fit.Controls.Dialog._internal.BaseDialog(content,true,cb);baseDialog.Dialog.Open();baseDialog.ConfirmButton.Focused(true);var diaApi={Dismiss:function(){baseDialog.Dismiss()},Confirm:function(){baseDialog.ConfirmButton.Click()},Cancel:function(){baseDialog.CancelButton.Click()}};return diaApi};Fit.Controls.Dialog.Prompt=function(content,defaultValue,cb){Fit.Validation.ExpectString(content);Fit.Validation.ExpectString(defaultValue);Fit.Validation.ExpectFunction(cb);var txt=new Fit.Controls.Input("FitUiControlDialogPrompt"+Fit.Data.CreateGuid());txt.Width(100,"%");txt.Value(defaultValue);var baseDialog=Fit.Controls.Dialog._internal.BaseDialog(content+"<br><br>",true,function(res){var val=txt.Value();txt.Dispose();txt=null;if(res===true){cb(val)}else{cb(null)}});Fit.Events.AddHandler(baseDialog.Dialog.GetDomElement(),"keydown",function(e){if(txt===null){return}if(e.keyCode===13&&txt.Focused()===true){Fit.Events.PreventDefault(e);baseDialog.ConfirmButton.Click()}else if(e.keyCode===27){baseDialog.CancelButton.Click()}});Fit.Dom.Add(baseDialog.Dialog.GetContentDomElement(),txt.GetDomElement());baseDialog.Dialog.Open();txt.Focused(true);var diaApi={Dismiss:function(){baseDialog.Dismiss()},Confirm:function(){baseDialog.ConfirmButton.Click()},Cancel:function(){baseDialog.CancelButton.Click()}};return diaApi};Fit.Internationalization.AddLocalization(Fit.Controls.Dialog,{en:{Ok:"OK",Cancel:"Cancel"},da:{Ok:"OK",Cancel:"Annuller"},de:{Ok:"OK",Cancel:"Abbrechen"},no:{Ok:"OK",Cancel:"Avbryt"}});Fit.Controls.DialogEditor=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.Dialog).Apply(ctlId);var me=this;var ed=null;var updatedConfig=null;function init(){Fit.Dom.AddClass(me.GetDomElement(),"FitUiControlDialogEditor");ed=new Fit.Controls.Input;ed.Width(100,"%");ed.Height(100,"%");ed.Render(me.GetContentDomElement());ed.DebounceOnChange(5e3);me.Width(850);me.MinimumWidth(20,"em");me.MaximumWidth(100,"%");me.Height(550);me.MinimumHeight(15,"em");me.MaximumHeight(100,"%");me.OnDismiss(function(sender){if(ed.IsValid()===false){Fit.Controls.Dialog.Alert(Fit.Dom.Data(ed.GetDomElement(),"errormessage"),function(){me.Focused(true)});return false}})}this.Open=Fit.Core.CreateOverride(this.Open,function(toElement){Fit.Validation.ExpectDomElement(toElement,true);if(ed.DesignMode()===false||updatedConfig!==null){ed.DesignMode(true,updatedConfig||undefined);updatedConfig=null}base(toElement);ed.Focused(true)});this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){ed.Dispose();base();me=ed=updatedConfig=null});this.Placeholder=function(val){Fit.Validation.ExpectString(val,true);return ed.Placeholder(val)};this.CheckSpelling=function(val){Fit.Validation.ExpectBoolean(val,true);return ed.CheckSpelling(val)};this.Value=function(val){Fit.Validation.ExpectString(val,true);return ed.Value(val)};this.IsDirty=function(){return ed.IsDirty()};this.IsValid=function(){return ed.IsValid()};this.Enabled=function(val){Fit.Validation.ExpectBoolean(val,true);return ed.Enabled(val)};this.Focused=function(val){Fit.Validation.ExpectBoolean(val,true);return ed.Focused(val)};this.AddValidationRule=function(validator,errorMessage){Fit.Validation.ExpectIsSet(validator);Fit.Validation.ExpectString(errorMessage,true);ed.DebounceOnChange(500);ed.ShowValidationErrorsOnChange(true);ed.AddValidationRule(validator,errorMessage)};this.RemoveValidationRule=function(validator){Fit.Validation.ExpectIsSet(validator);ed.RemoveValidationRule(validator)};this.RemoveAllValidationRules=function(){ed.RemoveAllValidationRules()};this._internal=this._internal||{};this._internal.SetDesignModeConfig=function(config){if(me.IsOpen()===true){ed.DesignMode(true,config)}else{updatedConfig=config}};init()};Fit.Controls.DropDown=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.ControlBase).Apply(ctlId);var me=this;var itemContainer=null;var itemCollection={};var itemCollectionOrdered=[];var itemDropZones={};var htmlAllowed=false;var placeholder="";var arrow=null;var txtPrimary=null;var txtActive=null;var txtEnabled=false;var dropDownMenu=null;var picker=null;var orgSelections=[];var invalidMessage="Invalid selection";var invalidMessageChanged=false;var initialFocus=true;var maxHeight={Value:150,Unit:"px"};var maxWidth={Value:-1,Unit:"px"};var prevValue="";var focusAssigned=false;var closeHandlers=[];var dropZone=null;var isMobile=false;var focusInputOnMobile=true;var detectBoundaries=false;var detectBoundariesRelToViewPort=false;var persistView=false;var highlightFirst=false;var searchModeOnFocus=false;var onScrollElement=null;var onScrollEventId=-1;var cancelEventRegistrationOnOpen=null;var onInputChangedHandlers=[];var onPasteHandlers=[];var onOpenHandlers=[];var onCloseHandlers=[];var suppressUpdateItemSelectionState=false;var suppressOnItemSelectionChanged=false;var clearTextSelectionOnInputChange=false;var prevTextSelection=null;var textSelectionCallback=null;var cmdToggleTextMode=null;function init(){Fit.Internationalization.OnLocaleChanged(localize);localize();me._internal.Data("multiselect","false");me._internal.Data("selectionmode","visual");me._internal.Data("selectionmodetoggle","false");me._internal.Data("open","false");isMobile=Fit.Device.OptimizeForTouch;itemContainer=document.createElement("div");itemContainer.tabIndex=-1;itemContainer.onclick=function(e){var target=Fit.Events.GetTarget(e);if(target.tagName!=="INPUT"){focusInputOnMobile=me.InputEnabled()===true;focusAssigned=true;focusInput(txtPrimary)}me.OpenDropDown()};Fit.Dom.AddClass(itemContainer,"FitUiControlDropDownItems");arrow=document.createElement("i");Fit.Dom.AddClass(arrow,"fa");Fit.Dom.AddClass(arrow,"fa-chevron-down");arrow.tabIndex=-1;arrow.onclick=function(e){focusInputOnMobile=false;if(me.IsDropDownOpen()===true){me.CloseDropDown();if(isMobile===true){me.Focused(false)}}else{me.OpenDropDown()}if(isMobile===false){focusAssigned=true;focusInput(txtPrimary)}Fit.Events.StopPropagation(e)};arrow.onfocus=function(e){focusAssigned=true};arrow.onblur=function(e){if(me===null){return}focusAssigned=false};txtPrimary=createSearchField();txtActive=txtPrimary;dropDownMenu=document.createElement("div");if(Fit.Browser.GetBrowser()!=="MSIE"||Fit.Browser.GetVersion()>=9){dropDownMenu.onmousewheel=function(e){var ev=Fit.Events.GetEvent(e);dropDownMenu.firstChild.scrollTop-=ev.wheelDeltaY!==undefined?ev.wheelDeltaY:ev.wheelDelta;Fit.Events.PreventDefault(ev)}}Fit.Dom.AddClass(dropDownMenu,"FitUiControlDropDownPicker");dropDownMenu.style.display="none";postpone(function(){if(isMobile===false){var eventId=Fit.Events.AddHandler(document,"click",function(e){var target=Fit.Events.GetTarget(e);if(target!==document.documentElement&&target!==document.body&&Fit.Dom.IsRooted(target)===false){return}if(me.IsDropDownOpen()===true&&target!==me.GetDomElement()&&Fit.Dom.Contained(me.GetDomElement(),target)===false){me.CloseDropDown()}});Fit.Array.Add(closeHandlers,eventId)}else{var coords=null;var eventId=-1;eventId=Fit.Events.AddHandler(document,"touchstart",function(e){var target=Fit.Events.GetTarget(e);coords=null;if(target!==document.documentElement&&target!==document.body&&Fit.Dom.IsRooted(target)===false){return}if(me.IsDropDownOpen()===true&&target!==me.GetDomElement()&&Fit.Dom.Contained(me.GetDomElement(),target)===false){coords=Fit.Events.GetPointerState().Coordinates.Document}});Fit.Array.Add(closeHandlers,eventId);eventId=Fit.Events.AddHandler(document,"touchend",function(e){if(coords===null)return;var curCoords=Fit.Events.GetPointerState().Coordinates.Document;var moved=Math.abs(coords.X-curCoords.X)>10||Math.abs(coords.Y-curCoords.Y)>10;if(moved===false){me.CloseDropDown();me.Focused(false)}});Fit.Array.Add(closeHandlers,eventId)}});me.OnBlur(function(){focusInputOnMobile=true;if(isMobile===true){me.CloseDropDown()}});me.OnOpen(function(){cancelEventRegistrationOnOpen=postpone(function(){cancelEventRegistrationOnOpen=null;onScrollElement=Fit.Dom.GetScrollParent(me.GetDomElement());if(onScrollElement===document.documentElement){onScrollElement=window}if(onScrollElement!==null){onScrollEventId=Fit.Events.AddHandler(onScrollElement,"scroll",function(e){me.CloseDropDown()})}})});me.OnClose(function(){if(cancelEventRegistrationOnOpen!==null){cancelEventRegistrationOnOpen();cancelEventRegistrationOnOpen=null}if(onScrollElement!==null){Fit.Events.RemoveHandler(onScrollElement,onScrollEventId);onScrollElement=null;onScrollEventId=-1}});Fit.Events.AddHandler(me.GetDomElement(),"contextmenu",function(e){if(Fit.Events.GetTarget(e).tagName!=="INPUT")return Fit.Events.PreventDefault(e)});me.OnFocus(function(){if(me.TextSelectionMode()===true){if(Fit.Browser.GetBrowser()==="MSIE"||Fit.Browser.GetBrowser()==="Edge"){txtPrimary.readOnly=false;postpone(function(){txtPrimary.blur();txtPrimary.focus()})}clearTextSelectionOnInputChange=true}});me.OnChange(function(){if(me.TextSelectionMode()===true){updateTextSelection()}});me.OnBlur(function(){if(me.TextSelectionMode()===true){updateTextSelection();if(Fit.Browser.GetBrowser()==="MSIE"||Fit.Browser.GetBrowser()==="Edge"){txtPrimary.readOnly=true}}});me.OnFocus(function(sender){if(searchModeOnFocus===true){searchModeOnFocus=false;me._internal.ClearInputForSearch(true);searchModeOnFocus=true}});me.OnBlur(function(){if(searchModeOnFocus===true){searchModeOnFocus=false;me._internal.UndoClearInputForSearch();searchModeOnFocus=true}});me.OnChange(function(){var controlIsActive=me.Focused()===true||me.IsDropDownOpen()===true;if(searchModeOnFocus===true&&controlIsActive===true){if(me.GetSelections().length===0){txtPrimary.placeholder=""}else{txtPrimary.placeholder=me.Placeholder()}}});me.OnFocus(function(){if(picker!==null){picker._internal.ReportFocused(true)}});me.OnBlur(function(){if(picker!==null){picker._internal.ReportFocused(false)}});Fit.Dom.Add(itemContainer,txtPrimary);Fit.Dom.Add(itemContainer,arrow);me._internal.AddDomElement(itemContainer);me._internal.AddDomElement(dropDownMenu);me.AddCssClass("FitUiControlDropDown")}this.InvalidSelectionMessage=function(msg){Fit.Validation.ExpectString(msg,true);if(Fit.Validation.IsSet(msg)===true){invalidMessage=msg;invalidMessageChanged=true;updateInvalidMessageForSelectedItems()}return invalidMessage};this.DropDownMaxHeight=function(value,unit){Fit.Validation.ExpectNumber(value,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(value)===true){maxHeight={Value:value,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};if(picker!==null)picker.MaxHeight(maxHeight.Value,maxHeight.Unit)}return maxHeight};this.DropDownMaxWidth=function(value,unit){Fit.Validation.ExpectNumber(value,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(value)===true){maxWidth={Value:value,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};if(value!==-1){dropDownMenu.style.width="auto";dropDownMenu.style.maxWidth=maxWidth.Value+maxWidth.Unit}else{dropDownMenu.style.width=me.DetectBoundaries()===true?dropDownMenu.style.width:"";dropDownMenu.style.maxWidth=""}}return maxWidth};this.Value=function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){if(preserveDirtyState!==true){orgSelections=[]}var fireChange=itemCollectionOrdered.length>0||val!=="";me._internal.ExecuteWithNoOnChange(function(){me.Clear();if(val!==""){Fit.Array.ForEach(val.split(";"),function(item){var info=item.split("=");if(info.length===2)me.AddSelection(decodeReserved(info[0]),decodeReserved(info[1]));else me.AddSelection(decodeReserved(info[0]),decodeReserved(info[0]))})}});if(preserveDirtyState!==true){orgSelections=me.GetSelections()}if(fireChange===true)fireOnChange()}var selections=me.GetSelections();var value="";Fit.Array.ForEach(selections,function(item){value+=(value!==""?";":"")+encodeReserved(item.Title)+"="+encodeReserved(item.Value)});return value};this.IsDirty=function(){return Fit.Core.IsEqual(orgSelections,me.GetSelections())===false};this.Clear=function(){me.ClearSelections()};this.Focused=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true){var c=txtPrimary;var v=c.value;c.focus();c.value="";c.value=v}else if(val===false&&Fit.Dom.Contained(me.GetDomElement(),Fit.Dom.GetFocused())===true){me.CloseDropDown();Fit.Dom.GetFocused().blur()}}return txtActive===Fit.Dom.GetFocused()||arrow===Fit.Dom.GetFocused()};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){if(picker!==null)picker.Destroy();if(Fit._internal.DropDown.Current===me){Fit._internal.DropDown.Current=null}Fit.Internationalization.RemoveOnLocaleChanged(localize);Fit.Array.ForEach(closeHandlers,function(eventId){Fit.Events.RemoveHandler(document,eventId)});Fit.Array.ForEach(itemDropZones,function(key){itemDropZones[key].Dispose()});if(onScrollElement!==null){Fit.Events.RemoveHandler(onScrollElement,onScrollEventId)}me=itemContainer=itemCollection=itemCollectionOrdered=itemDropZones=htmlAllowed=placeholder=arrow=txtPrimary=txtActive=txtEnabled=dropDownMenu=picker=orgSelections=invalidMessage=invalidMessageChanged=initialFocus=maxHeight=maxWidth=prevValue=focusAssigned=closeHandlers=dropZone=isMobile=focusInputOnMobile=detectBoundaries=detectBoundariesRelToViewPort=persistView=highlightFirst=searchModeOnFocus=onScrollElement=onScrollEventId=cancelEventRegistrationOnOpen=onInputChangedHandlers=onPasteHandlers=onOpenHandlers=onCloseHandlers=suppressUpdateItemSelectionState=suppressOnItemSelectionChanged=clearTextSelectionOnInputChange=prevTextSelection=textSelectionCallback=cmdToggleTextMode=null;base()});this.HtmlAllowed=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&htmlAllowed!==val){htmlAllowed=val;Fit.Array.ForEach(itemCollectionOrdered,function(item){me.RenameSelection(item.Value,item.Title)})}return htmlAllowed};this.Placeholder=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){placeholder=val;updatePlaceholder(true)}return placeholder};this.TextSelectionMode=function(val,cb){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectFunction(cb,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&me.TextSelectionMode()===false){textSelectionCallback=cb?cb:null;me.ClearInput();updateTextSelection();if(me.Focused()===false&&(Fit.Browser.GetBrowser()==="MSIE"||Fit.Browser.GetBrowser()==="Edge")){txtPrimary.readOnly=true}}else if(val===false&&me.TextSelectionMode()===true){if(txtPrimary.value===prevTextSelection){txtPrimary.value=""}else{me.ClearInput()}clearTextSelectionOnInputChange=false;prevTextSelection=null;textSelectionCallback=null;if(Fit.Browser.GetBrowser()==="MSIE"||Fit.Browser.GetBrowser()==="Edge"){txtPrimary.readOnly=false}}me._internal.Data("selectionmode",val===true?"text":"visual");if(cmdToggleTextMode!==null){if(val===true){Fit.Dom.RemoveClass(cmdToggleTextMode,"fa-compress");Fit.Dom.AddClass(cmdToggleTextMode,"fa-expand")}else{{Fit.Dom.RemoveClass(cmdToggleTextMode,"fa-expand");Fit.Dom.AddClass(cmdToggleTextMode,"fa-compress")}}}me._internal.Repaint()}return me._internal.Data("selectionmode")==="text"};this.SelectionModeToggle=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&cmdToggleTextMode===null){cmdToggleTextMode=document.createElement("span");cmdToggleTextMode.onclick=function(){me.TextSelectionMode(!me.TextSelectionMode())};Fit.Dom.AddClass(cmdToggleTextMode,"fa");Fit.Dom.AddClass(cmdToggleTextMode,me.TextSelectionMode()===true?"fa-expand":"fa-compress");me._internal.AddDomElement(cmdToggleTextMode);me._internal.Data("selectionmodetoggle","true")}else if(val===false&&cmdToggleTextMode!==null){me._internal.RemoveDomElement(cmdToggleTextMode);cmdToggleTextMode=null;me._internal.Data("selectionmodetoggle","false")}}return cmdToggleTextMode!==null};this.MultiSelectionMode=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&me.MultiSelectionMode()!==val){me.ClearSelections();me._internal.Data("multiselect",val.toString())}return me._internal.Data("multiselect")==="true"};this.GetPicker=function(){return picker};this.SetPicker=function(pickerControl){Fit.Validation.ExpectInstance(pickerControl,Fit.Controls.PickerBase,true);if(pickerControl===picker)return;if(picker!==null)Fit.Dom.Remove(picker.GetDomElement());if(!pickerControl){picker=null;return}pickerControl._internal.InitializePicker();pickerControl._internal.ReportFocused(me.Focused());picker=pickerControl;Fit.Dom.Add(dropDownMenu,picker.GetDomElement());suppressOnItemSelectionChanged=true;picker.SetSelections(me.GetSelections());suppressOnItemSelectionChanged=false;picker.MaxHeight(maxHeight.Value,maxHeight.Unit);optimizeDropDownPosition();picker.PersistView(persistView);picker.HighlightFirst(highlightFirst);if(!picker._internal)picker._internal={};if(picker._internal.HostControl)return;picker._internal.HostControl=me;var fireChangeEvent=false;picker.OnItemSelectionChanged(function(sender,eventArgs){if(suppressOnItemSelectionChanged===true)return;var txt=null;suppressUpdateItemSelectionState=true;if(eventArgs.Selected===true&&me.GetSelectionByValue(eventArgs.Value)===null){fireChangeEvent=true;me._internal.ExecuteWithNoOnChange(function(){me.AddSelection(eventArgs.Title,eventArgs.Value)});if(me.MultiSelectionMode()===false)me.CloseDropDown()}else if(eventArgs.Selected===false&&me.GetSelectionByValue(eventArgs.Value)!==null){fireChangeEvent=true;txt=txtActive;me._internal.ExecuteWithNoOnChange(function(){me.RemoveSelection(eventArgs.Value)});if(txt.parentElement.parentElement===null)txt=txtPrimary}else{if(picker===sender){if(me.TextSelectionMode()===true){updateTextSelection()}else{me.ClearInput()}}}suppressUpdateItemSelectionState=false});picker.OnItemSelectionComplete(function(sender){if(suppressOnItemSelectionChanged===true)return;if(fireChangeEvent===true){me._internal.FireOnChange();fireChangeEvent=false}});picker.OnFocusIn(function(sender){focusAssigned=true;focusInput(txtActive)})};this.AddSelection=function(title,value,valid){Fit.Validation.ExpectString(title);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(valid,true);if(me.GetSelectionByValue(value)!==null)return;if(picker!==null&&suppressUpdateItemSelectionState===false){suppressOnItemSelectionChanged=true;var res=true;var error=null;try{res=picker.UpdateItemSelection(value,true,me.Focused()===false)}catch(err){error=err}suppressOnItemSelectionChanged=false;if(error!==null)Fit.Validation.ThrowError(error);if(res===false)return}if(me.MultiSelectionMode()===false){var error=null;suppressOnItemSelectionChanged=true;try{me._internal.ExecuteWithNoOnChange(function(){me.ClearSelections()})}catch(err){error=err}suppressOnItemSelectionChanged=false;if(error!==null)Fit.Validation.ThrowError(error);if(itemCollectionOrdered.length>0)return}var cmdDelete=document.createElement("i");Fit.Dom.AddClass(cmdDelete,"fa");Fit.Dom.AddClass(cmdDelete,"fa-times");cmdDelete.tabIndex=-1;cmdDelete.onclick=function(e){me.RemoveSelection(decode(Fit.Dom.Data(cmdDelete.parentElement,"value")));focusAssigned=true;focusInput(txtPrimary);Fit.Events.StopPropagation(e)};cmdDelete.onmouseup=function(){focusAssigned=true;focusInput(txtPrimary)};var container=document.createElement("span");container.tabIndex=-1;var searchLeft=createSearchField();var searchRight=createSearchField();var item=document.createElement("span");Fit.Dom.Data(item,"value",encode(value));if(valid===false){Fit.Dom.Attribute(item,"title",invalidMessage);Fit.Dom.AddClass(item,"FitUiControlDropDownInvalid")}var titleNode=me.HtmlAllowed()===false?document.createTextNode(Fit.String.StripHtml(title)):Fit.Dom.CreateElement(title);Fit.Dom.Add(item,titleNode);Fit.Dom.Add(item,cmdDelete);Fit.Dom.Add(container,searchLeft);Fit.Dom.Add(container,item);Fit.Dom.Add(container,searchRight);var before=null;if(txtActive!==txtPrimary&&me.MultiSelectionMode()===true&&Fit.Dom.GetIndex(txtActive)===0)before=txtActive.parentElement;else if(txtActive!==txtPrimary&&me.MultiSelectionMode()===true&&Fit.Dom.GetIndex(txtActive)===2)before=txtActive.parentElement.nextSibling;else before=txtPrimary;itemContainer.insertBefore(container,before);var itemObject=createItemObject(title,value,valid!==false,item,titleNode);itemCollection[itemObject.Value]=itemObject;itemCollectionOrdered.push(itemObject);if(me.TextSelectionMode()===false){me.ClearInput()}var drg=new Fit.DragDrop.Draggable(container,item);drg.OnDragStop(onDragStop);drg.OnDragging(onDragging);var drp=new Fit.DragDrop.DropZone(container);drp.OnDrop(onDrop);drp.OnEnter(onDropZoneEnter);drp.OnLeave(onDropZoneLeave);itemDropZones[value]=drp;if(me.MultiSelectionMode()===true){if(txtActive!==txtPrimary&&Fit.Dom.GetIndex(txtActive)===2){focusInput(searchRight)}}else{focusInput(txtPrimary)}fireOnChange()};this.GetSelections=function(includeInvalid){Fit.Validation.ExpectBoolean(includeInvalid,true);var toReturn=[];Fit.Array.ForEach(itemCollectionOrdered,function(selection){if(includeInvalid===true||selection.Valid===true){Fit.Array.Add(toReturn,{Title:selection.Title,Value:selection.Value,Valid:selection.Valid})}});return toReturn};this.GetSelectionByValue=function(val){Fit.Validation.ExpectString(val);var selection=itemCollection[val]||null;if(selection!==null){return{Title:selection.Title,Value:selection.Value,Valid:selection.Valid}}return null};this.GetHighlighted=function(){if(picker!==null){var hl=picker.GetHighlighted();return hl!==null?{Title:hl.Title,Value:hl.Value,Valid:true}:null}return null};this.PersistView=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==persistView){persistView=val;if(me.GetPicker()!==null){me.GetPicker().PersistView(val)}}return persistView};this.HighlightFirst=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){highlightFirst=val;if(me.GetPicker()!==null){me.GetPicker().HighlightFirst(val)}}return highlightFirst};this.RenameSelection=function(val,newTitle){Fit.Validation.ExpectString(val);Fit.Validation.ExpectString(newTitle);var selection=itemCollection[val]||null;if(selection!==null){var orgTitle=selection.Title;var newTitleNode=me.HtmlAllowed()===false?document.createTextNode(Fit.String.StripHtml(newTitle)):Fit.Dom.CreateElement(newTitle);Fit.Dom.Replace(selection.TitleNode,newTitleNode);selection.Title=newTitle;selection.TitleNode=newTitleNode;if(orgTitle!==newTitle){fireOnChange()}}};this.ClearSelections=function(){var fireEvent=false;var wasFocused=focusAssigned;me._internal.ExecuteWithNoOnChange(function(){Fit.Array.ForEach(itemCollectionOrdered,function(selection){if(picker!==null){suppressOnItemSelectionChanged=true;var res=true;var error=null;try{var res=picker.UpdateItemSelection(selection.Value,false,me.Focused()===false)}catch(err){error=err}suppressOnItemSelectionChanged=false;if(error!==null)Fit.Validation.ThrowError(error);if(res!==false&&selection.DomElement.parentElement.parentElement!==null){Fit.Dom.Remove(selection.DomElement.parentElement)}if(res!==false)fireEvent=true}else{Fit.Dom.Remove(selection.DomElement.parentElement);fireEvent=true}});Fit.Array.ForEach(itemDropZones,function(key){itemDropZones[key].Dispose()});itemCollection={};itemCollectionOrdered=[];itemDropZones={}});focusAssigned=wasFocused;focusInput(txtPrimary);if(fireEvent===true)fireOnChange()};this.RemoveSelection=function(value){Fit.Validation.ExpectString(value);if(picker!==null&&suppressUpdateItemSelectionState===false){suppressOnItemSelectionChanged=true;var res=false;var error=null;try{res=picker.UpdateItemSelection(value,false,me.Focused()===false)}catch(err){error=err}suppressOnItemSelectionChanged=false;if(error!==null)Fit.Validation.ThrowError(error);if(res===false)return}var found=null;var txt=null;var itemObject=itemCollection[value]||null;if(itemObject===null)return;if(me.MultiSelectionMode()===true&&itemObject.DomElement.parentElement.nextSibling!==null&&itemObject.DomElement.parentElement.nextSibling!==txtPrimary)txt=itemObject.DomElement.parentElement.nextSibling.children[0];found=itemObject.DomElement.parentElement;if(me.TextSelectionMode()===false){if(me.MultiSelectionMode()===false)focusInput(txtPrimary);else focusInput(txt!==null?txt:txtPrimary)}Fit.Dom.Remove(found);Fit.Array.Remove(itemCollectionOrdered,itemObject);delete itemCollection[value];itemDropZones[value].Dispose();delete itemDropZones[value];fireOnChange()};this.UpdateSelected=function(){if(me.GetPicker()===null){return[]}var updated=[];var selections=me.GetSelections();Fit.Array.ForEach(selections,function(selected){var pickerItem=me.GetPicker().GetItemByValue(selected.Value);if(pickerItem!==null){me.RenameSelection(selected.Value,pickerItem.Title);Fit.Array.Add(updated,{Title:pickerItem.Title,Value:selected.Value,Exists:true})}else{Fit.Array.Add(updated,{Title:selected.Title,Value:selected.Value,Exists:false})}});if(me.TextSelectionMode()===true){me.TextSelectionMode(false);me.TextSelectionMode(true)}return updated};this.ClearInput=function(input){Fit.Validation.ExpectInstance(input,HTMLInputElement,true);var inp=Fit.Validation.IsSet(input)===true?input:txtActive;if(inp.value==="")return;inp.value="";setInputEditing(inp,false);if(inp===txtActive)prevValue="";fireOnInputChanged("")};this.SetInputValue=function(val){Fit.Validation.ExpectString(val);var txt=txtActive;var fireOnChange=txt.value!==val;if(focusAssigned===false&&txt!==txtPrimary){txtActive.value="";setInputEditing(txtActive,false);txt=txtPrimary;txtActive=txtPrimary}setInputEditing(txt,val!=="");txt.value=val;prevValue=val;if(fireOnChange===true){fireOnInputChanged(txt.value)}};this.GetInputValue=function(){return txtActive.value};this.InputEnabled=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){txtEnabled=val}return txtEnabled};this.SearchModeOnFocus=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){searchModeOnFocus=val;if(me.InputEnabled()===false&&val===true){me.InputEnabled(true)}}return searchModeOnFocus};this.OpenDropDown=function(){if(dropDownMenu.style.display==="block")return;if(Fit._internal.DropDown.Current!==null&&Fit._internal.DropDown.Current!==me)Fit._internal.DropDown.Current.CloseDropDown();if(searchModeOnFocus===false&&me.TextSelectionMode()===false&&txtActive===txtPrimary&&me.GetInputValue()===""){me._internal.UndoClearInputForSearch()}optimizeDropDownPosition(true);dropDownMenu.style.minWidth=me.GetDomElement().offsetWidth+"px";dropDownMenu.style.display="block";me._internal.Data("open","true");Fit._internal.DropDown.Current=me;fireOnDropDownOpen();if(me.GetPicker()!==null&&me.MultiSelectionMode()===false&&me.GetSelections().length===1){me.GetPicker().RevealItemInView(me.GetSelections()[0].Value)}};this.CloseDropDown=function(){if(dropDownMenu.style.display==="none")return;dropDownMenu.style.display="none";resetDropDownPosition();me._internal.Data("open","false");Fit._internal.DropDown.Current=null;fireOnDropDownClose()};this.IsDropDownOpen=function(){return dropDownMenu.style.display==="block"};this.DetectBoundaries=function(val,relativeToViewport){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(relativeToViewport,true);if(Fit.Validation.IsSet(val)===true){detectBoundaries=val;detectBoundariesRelToViewPort=relativeToViewport===true}return detectBoundaries};this.OnInputChanged=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onInputChangedHandlers,cb)};this.OnPaste=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onPasteHandlers,cb)};this.OnOpen=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onOpenHandlers,cb)};this.OnClose=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onCloseHandlers,cb)};this._internal=this._internal?this._internal:{};this._internal.ClearInputForSearch=function(keepDropDownOpen){Fit.Validation.ExpectBoolean(keepDropDownOpen,true);if(me.TextSelectionMode()===true){forceFocusInput(txtPrimary);txtPrimary.value="";updatePlaceholder(true)}else{forceFocusInput(txtPrimary);me.ClearInput();setInputEditing(txtPrimary,true)}if(keepDropDownOpen!==true){me.CloseDropDown()}};this._internal.UndoClearInputForSearch=function(){if(me.TextSelectionMode()===true){updateTextSelection()}else{me.ClearInput();setInputEditing(txtPrimary,false)}};this._internal.ForceFocusMobile=function(){focusInputOnMobile=true;focusInput(txtPrimary)};function createSearchField(){var txt=document.createElement("input");txt.autocomplete="off";txt.spellcheck=false;txt.onpaste=function(e){var orgValue=txt.value;postpone(function(){prevValue=txt.value;var pastedValue=txt.value;setInputEditing(txt,true);if(fireOnPaste(txt.value)===true){if(txt.value===pastedValue){fireOnInputChanged(txt.value)}}else{if(txt.value===pastedValue){txt.value=orgValue;prevValue=txt.value}}});clearTextSelectionOnInputChange=false};txt.ontouchstart=function(e){focusInputOnMobile=true};txt.onfocus=function(e){if(moveFocusToArrowOnMobile()===true){return}if(Fit.Dom.GetIndex(txt.parentElement)===itemCollectionOrdered.length-1&&txt.nextSibling===null){txtPrimary.focus();return}focusAssigned=true;if(initialFocus===true){initialFocus=false;if(me.TextSelectionMode()===false)me.ClearInput(txtPrimary)}txtActive=txt;prevValue=me.TextSelectionMode()===false?txtActive.value:prevValue;clearAllInputsButActive()};txt.onblur=function(e){if(me===null){return}focusAssigned=false;if(txt.value===""){setInputEditing(txt,false)}};var isIgnoreKey=function(keyCode,allowDelete){var modKeys=Fit.Events.GetModifierKeys();return modKeys.Ctrl===true||modKeys.Alt===true||modKeys.Meta===true||Fit.Array.Contains([9,13,16,20,27,37,38,39,40],keyCode)===true||allowDelete!==true&&(keyCode===8||keyCode===46)};txt.onkeydown=function(e){var ev=Fit.Events.GetEvent(e);txtActive=txt;clearAllInputsButActive();if(isIgnoreKey(ev.keyCode)===false){updatePlaceholder(true,true);setInputEditing(txt,true)}if(picker!==null){if(me.IsDropDownOpen()===true){var res=picker.HandleEvent(ev);if(res===false)return}}if(me.TextSelectionMode()===true&&clearTextSelectionOnInputChange===true&&txtEnabled===true){if(isIgnoreKey(ev.keyCode,true)===false){clearTextSelectionOnInputChange=false;txt.value="";return}}if(ev.keyCode===9){if(me.TextSelectionMode()===true){me.CloseDropDown();return}if(ev.shiftKey===true){if(me.GetSelections().length===0){me.CloseDropDown();return}else if(txt!==txtPrimary&&txt.parentElement.previousSibling===null){me.CloseDropDown();return}moveToInput("Prev")}else{if(txt===txtPrimary){me.CloseDropDown();return}moveToInput("Next")}return false}else if(ev.keyCode===38){me.OpenDropDown()}else if(ev.keyCode===40){me.OpenDropDown();if(me.TextSelectionMode()===true){Fit.Dom.SetCaretPosition(txtPrimary,0);Fit.Events.PreventDefault(ev)}}else if(ev.keyCode===37){if(me.TextSelectionMode()===true)return;moveToInput("Prev")}else if(ev.keyCode===39){if(me.TextSelectionMode()===true)return;moveToInput("Next")}else if(ev.keyCode===27){if(Fit.Browser.GetInfo().Name==="MSIE")Fit.Events.PreventDefault(ev);me.CloseDropDown()}else if(ev.keyCode===8){if(me.TextSelectionMode()===true){if(txtEnabled===false){Fit.Events.PreventDefault(ev)}return}if(txt.value.length===0){if(txt===txtPrimary){me._internal.UndoClearInputForSearch()}if(Fit.Browser.GetInfo().Name==="MSIE")Fit.Events.PreventDefault(ev);var toRemove=null;if(txt!==txtPrimary&&Fit.Dom.GetIndex(txt)===2)toRemove=txt.parentElement;else if(txt!==txtPrimary&&Fit.Dom.GetIndex(txt)===0&&txt.parentElement.previousSibling!==null)toRemove=txt.parentElement.previousSibling;else if(txt.previousSibling!==null)toRemove=txt.previousSibling;if(toRemove!==null){me.RemoveSelection(decode(Fit.Dom.Data(toRemove.children[1],"value")))}}}else if(ev.keyCode===46){if(me.TextSelectionMode()===true){if(txtEnabled===false){Fit.Events.PreventDefault(ev)}return}if(txt.value.length===0){var toRemove=null;if(txt!==txtPrimary&&Fit.Dom.GetIndex(txt)===0)toRemove=txt.parentElement;else if(txt!==txtPrimary&&Fit.Dom.GetIndex(txt)===2&&txt.parentElement.nextSibling.tagName==="SPAN")toRemove=txt.parentElement.nextSibling;if(toRemove!==null){me.RemoveSelection(decode(Fit.Dom.Data(toRemove.children[1],"value")))}}}else if(ev.keyCode===13){Fit.Events.PreventDefault(e)}else{if(txtEnabled===false){if(Fit.Events.GetModifierKeys().Meta===false&&Fit.Events.GetModifierKeys().Ctrl===false){Fit.Events.PreventDefault(ev)}return}}};txt.onkeyup=function(e){var ev=Fit.Events.GetEvent(e);if(ev.keyCode!==37&&ev.keyCode!==38&&ev.keyCode!==39&&ev.keyCode!==40&&ev.keyCode!==27&&ev.keyCode!==9&&ev.keyCode!==16&&ev.ctrlKey===false&&ev.keyCode!==17){if(me.TextSelectionMode()===true&&txt.value===prevTextSelection){return}if(txt.value!==prevValue){prevValue=txt.value;fireOnInputChanged(txt.value)}}};return txt}function createItemObject(title,value,valid,domElement,titleNode){Fit.Validation.ExpectString(title);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(valid);Fit.Validation.ExpectDomElement(domElement);Fit.Validation.ExpectNode(titleNode);return{Title:title,Value:value,Valid:valid,DomElement:domElement,TitleNode:titleNode}}function moveToInput(direction){Fit.Validation.ExpectString(direction);var newInput=null;if(direction==="Prev"){if(txtActive!==txtPrimary&&Fit.Dom.GetIndex(txtActive)===0&&txtActive.parentElement.previousSibling!==null)newInput=txtActive.parentElement.previousSibling.children[0];else if(txtActive!==txtPrimary&&Fit.Dom.GetIndex(txtActive)===2)newInput=txtActive.parentElement.children[0];else if(txtActive.previousSibling!==null)newInput=txtActive.previousSibling.children[0]}else{var itemContainer=null;if(txtActive!==txtPrimary&&Fit.Dom.GetIndex(txtActive)===0)itemContainer=txtActive.parentElement;else if(txtActive!==txtPrimary&&Fit.Dom.GetIndex(txtActive)===2&&txtActive.parentElement.nextSibling.tagName==="SPAN")itemContainer=txtActive.parentElement.nextSibling;if(itemContainer!==null)newInput=itemContainer.children[2]}if(newInput===null)return;focusInput(newInput)}function moveFocusToArrowOnMobile(){if(isMobile===true&&(focusInputOnMobile===false||me.TextSelectionMode()===true&&me.InputEnabled()===false)){arrow.focus();return true}return false}function focusInput(input){Fit.Validation.ExpectInstance(input,HTMLInputElement);txtActive=input;if(focusAssigned===true){if(moveFocusToArrowOnMobile()===false){txtActive.focus()}}}function forceFocusInput(input){Fit.Validation.ExpectInstance(input,HTMLInputElement);var orgFocusInputOnMobile=focusInputOnMobile;focusInputOnMobile=true;focusInput(input);focusInputOnMobile=orgFocusInputOnMobile}function setInputEditing(input,val,keepStateOnParent){Fit.Validation.ExpectInstance(input,HTMLInputElement);Fit.Validation.ExpectBoolean(val);Fit.Validation.ExpectBoolean(keepStateOnParent,true);if(searchModeOnFocus===true&&input===txtPrimary){return}if(keepStateOnParent!==true){Fit.Dom.Data(input.parentElement,"editing",val===true?"true":null)}Fit.Dom.Data(input,"editing",val===true?"true":null);if(input===txtPrimary){txtPrimary.placeholder=val===true&&me.GetSelections().length>0?me.Placeholder():""}me._internal.Repaint()}function clearAllInputsButActive(){var inputs=itemContainer.getElementsByTagName("input");Fit.Array.ForEach(inputs,function(input){if(input===txtActive)return;if(txtActive.parentElement===input.parentElement){setInputEditing(input,false,true)}else{setInputEditing(input,false)}me.ClearInput(input)});me._internal.Repaint()}function optimizeDropDownPosition(force){Fit.Validation.ExpectBoolean(force,true);if(detectBoundaries===false||me.IsDropDownOpen()===false&&force!==true)return;if(Fit.Dom.IsVisible(me.GetDomElement())===false)return;resetDropDownPosition();if(typeof me._customDropDownPositioning==="function"){me._customDropDownPositioning(me,dropDownMenu,getDropDownMaxWidthPixelValue());return}var spaceRequiredBelowControl=100;var spaceRequiredRightSide=getDropDownMaxWidthPixelValue();var spacingToEdge=10;var positionFixedConstrained=false;if(detectBoundariesRelToViewPort===true&&Fit.Dom.PositionFixedConstrained(dropDownMenu)===true){console.warn("Unable to position dropdown menu relative to viewport due to CSS constraint");positionFixedConstrained=true}if(detectBoundariesRelToViewPort===false||positionFixedConstrained===true){var posFromTopWithinContainer=-1;var posFromLeftWithinContainer=-1;var availableSpaceBelowControl=-1;var availableSpaceRightOfControl=-1;var mostSpaceAboveControl=false;var mostSpaceLeftOfControl=false;var condNotEnoughSpaceBelow=false;var condNotEnoughSpaceRightSide=false;var overflowParent=Fit.Dom.GetOverflowingParent(me.GetDomElement());if(overflowParent!==null){var overflowParentPosition=Fit.Dom.GetBoundingPosition(overflowParent);var parentPosY=overflowParentPosition.Y+parseInt(Fit.Dom.GetComputedStyle(overflowParent,"border-top-width"));var parentPosX=overflowParentPosition.X+parseInt(Fit.Dom.GetComputedStyle(overflowParent,"border-right-width"));var parentInnerHeight=overflowParent.offsetHeight-parseInt(Fit.Dom.GetComputedStyle(overflowParent,"border-top-width"))-parseInt(Fit.Dom.GetComputedStyle(overflowParent,"border-bottom-width"));var parentInnerWidth=overflowParent.offsetWidth-parseInt(Fit.Dom.GetComputedStyle(overflowParent,"border-left-width"))-parseInt(Fit.Dom.GetComputedStyle(overflowParent,"border-right-width"));var controlPos=Fit.Dom.GetBoundingPosition(itemContainer);var parentScrollbars=Fit.Dom.GetScrollBars(overflowParent);posFromTopWithinContainer=controlPos.Y-parentPosY;posFromLeftWithinContainer=controlPos.X-parentPosX;availableSpaceBelowControl=parentInnerHeight-(posFromTopWithinContainer+itemContainer.offsetHeight)-parentScrollbars.Horizontal.Size;availableSpaceRightOfControl=parentInnerWidth-(posFromLeftWithinContainer+itemContainer.offsetWidth)-parentScrollbars.Vertical.Size}else{var controlPos=Fit.Dom.GetBoundingPosition(itemContainer);var controlPositionY=controlPos.Y;var controlPositionX=controlPos.X;var viewPortDimensions=Fit.Browser.GetViewPortDimensions();var spaceBelowControl=viewPortDimensions.Height-(controlPositionY+itemContainer.offsetHeight);var spaceRightOfControl=viewPortDimensions.Width-(controlPositionX+itemContainer.offsetWidth);posFromTopWithinContainer=controlPositionY;posFromLeftWithinContainer=controlPositionX;availableSpaceBelowControl=spaceBelowControl;availableSpaceRightOfControl=spaceRightOfControl}mostSpaceAboveControl=posFromTopWithinContainer>availableSpaceBelowControl;mostSpaceLeftOfControl=posFromLeftWithinContainer>availableSpaceRightOfControl;condNotEnoughSpaceBelow=availableSpaceBelowControl-spacingToEdge<spaceRequiredBelowControl;condNotEnoughSpaceRightSide=spaceRequiredRightSide===-1?false:availableSpaceRightOfControl-spacingToEdge<spaceRequiredRightSide;var spaceAvailable=-1;if(condNotEnoughSpaceBelow===true&&mostSpaceAboveControl===true){dropDownMenu.style.bottom=itemContainer.offsetHeight+"px";spaceAvailable=posFromTopWithinContainer-spacingToEdge}else{spaceAvailable=availableSpaceBelowControl-spacingToEdge}if(picker!==null&&(maxHeight.Unit!=="px"||maxHeight.Value>spaceAvailable)){picker.MaxHeight(spaceAvailable,"px")}if(picker!==null&&Fit.Core.IsEqual(picker.MaxHeight(),maxHeight)===false&&picker.MaxHeight().Value<maxHeight.Value){picker.MaxHeight(maxHeight.Value<spaceAvailable?maxHeight.Value:spaceAvailable,"px")}if(condNotEnoughSpaceRightSide===true&&mostSpaceLeftOfControl===true){dropDownMenu.style.right="0px";var spaceAvailableLeftSide=posFromLeftWithinContainer+itemContainer.offsetWidth-spacingToEdge;if(spaceAvailableLeftSide<spaceRequiredRightSide){dropDownMenu.style.maxWidth=spaceAvailableLeftSide+"px"}}else{var spaceAvailableRightSide=availableSpaceRightOfControl+itemContainer.offsetWidth-spacingToEdge;if(spaceAvailableRightSide<spaceRequiredRightSide){dropDownMenu.style.maxWidth=spaceAvailableRightSide+"px"}}}else{var viewPortDimensions=Fit.Browser.GetViewPortDimensions();var controlPositionY=Fit.Dom.GetBoundingPosition(itemContainer).Y;var controlPositionX=Fit.Dom.GetBoundingPosition(itemContainer).X;var spaceAboveControl=controlPositionY;var spaceBelowControl=viewPortDimensions.Height-(controlPositionY+itemContainer.offsetHeight);var spaceLeftOfControl=controlPositionX;var spaceRightOfControl=viewPortDimensions.Width-(controlPositionX+itemContainer.offsetWidth);var mostSpaceAboveControl=spaceAboveControl>spaceBelowControl;var mostSpaceLeftOfControl=spaceRightOfControl<spaceLeftOfControl;var condNotEnoughSpaceBelow=spaceBelowControl-spacingToEdge<spaceRequiredBelowControl;var condNotEnoughSpaceRightSide=spaceRightOfControl+itemContainer.offsetWidth-spacingToEdge<spaceRequiredRightSide;dropDownMenu.style.position="fixed";dropDownMenu.style.width="auto";var spaceAvailable=-1;if(condNotEnoughSpaceBelow===true&&mostSpaceAboveControl===true){var scrollParent=Fit.Dom.GetScrollParent(me.GetDomElement());if(scrollParent!==null&&scrollParent!==Fit.Dom.GetScrollDocument()){var scrollParentPosY=Fit.Dom.GetBoundingPosition(scrollParent).Y;scrollParentPosY=scrollParentPosY+parseInt(Fit.Dom.GetComputedStyle(scrollParent,"border-top-width"));if(controlPositionY<scrollParentPosY){controlPositionY=scrollParentPosY}}dropDownMenu.style.bottom=viewPortDimensions.Height-controlPositionY+"px";spaceAvailable=controlPositionY-spacingToEdge}else{var scrollParent=Fit.Dom.GetScrollParent(me.GetDomElement());var alternativeTopPos=-1;if(scrollParent!==null&&scrollParent!==Fit.Dom.GetScrollDocument()){var scrollParentBottomPosY=Fit.Dom.GetBoundingPosition(scrollParent).Y+scrollParent.offsetHeight-parseInt(Fit.Dom.GetComputedStyle(scrollParent,"border-bottom-width"));var controlBottomPosY=controlPositionY+itemContainer.offsetHeight;if(controlBottomPosY>scrollParentBottomPosY){alternativeTopPos=scrollParentBottomPosY}}dropDownMenu.style.top=(alternativeTopPos!==-1?alternativeTopPos:controlPositionY+itemContainer.offsetHeight)+"px";spaceAvailable=spaceBelowControl-spacingToEdge}if(picker!==null&&(maxHeight.Unit!=="px"||maxHeight.Value>spaceAvailable)){picker.MaxHeight(spaceAvailable,"px")}if(picker!==null&&Fit.Core.IsEqual(picker.MaxHeight(),maxHeight)===false&&picker.MaxHeight().Value<maxHeight.Value){picker.MaxHeight(maxHeight.Value<spaceAvailable?maxHeight.Value:spaceAvailable,"px")}if(condNotEnoughSpaceRightSide===true&&mostSpaceLeftOfControl===true){dropDownMenu.style.right=spaceRightOfControl+"px";var spaceAvailableLeftSide=controlPositionX+itemContainer.offsetWidth-spacingToEdge;if(spaceAvailableLeftSide<spaceRequiredRightSide){dropDownMenu.style.maxWidth=spaceAvailableLeftSide+"px"}}else{dropDownMenu.style.left=controlPositionX+"px";var spaceAvailableRightSide=spaceRightOfControl+itemContainer.offsetWidth-spacingToEdge;if(spaceAvailableRightSide<spaceRequiredRightSide){dropDownMenu.style.maxWidth=spaceAvailableRightSide+"px"}}}}function resetDropDownPosition(){dropDownMenu.style.position="";dropDownMenu.style.width=maxWidth.Value>-1?dropDownMenu.style.width:"";dropDownMenu.style.maxWidth=maxWidth.Value>-1?maxWidth.Value+maxWidth.Unit:"";dropDownMenu.style.bottom="";dropDownMenu.style.top="";dropDownMenu.style.left="";dropDownMenu.style.right="";if(picker!==null)picker.MaxHeight(maxHeight.Value,maxHeight.Unit)}function getDropDownMaxWidthPixelValue(){var maxWidthPixels=-1;if(maxWidth.Value!==-1){if(maxWidth.Unit==="px"){maxWidthPixels=maxWidth.Value}else{maxWidthPixels=parseInt(Fit.Dom.GetComputedStyle(dropDownMenu,"maxWidth"))}}return maxWidthPixels}function updatePlaceholder(force,willAssumeInputValue){Fit.Validation.ExpectBoolean(force,true);Fit.Validation.ExpectBoolean(willAssumeInputValue,true);if(Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()<10){return}if(placeholder!==""||force===true){var setPlaceholder=placeholder!==""&&(me.TextSelectionMode()===true||itemCollectionOrdered.length===0)&&me.GetInputValue()===""&&willAssumeInputValue!==true;Fit.Dom.Data(itemContainer,"placeholder",setPlaceholder===true?placeholder:null);Fit.Dom.Data(itemContainer,"placeholder-autoclear",setPlaceholder===true?Fit.Browser.GetBrowser()==="MSIE"?"true":"false":null)}}function onDragStop(draggable){draggable.Reset()}function onDragging(draggable){if(dropZone===null)return;var pointerPos=Fit.Events.GetPointerState().Coordinates.ViewPort;var elmPos=Fit.Dom.GetPosition(dropZone.GetDomElement(),true);if(elmPos.X+dropZone.GetDomElement().offsetWidth/2<pointerPos.X){Fit.Dom.Data(dropZone.GetDomElement(),"dropping","right")}else{Fit.Dom.Data(dropZone.GetDomElement(),"dropping","left")}me._internal.Repaint()}function onDrop(dropzone,draggable){var fireChange=false;if(Fit.Dom.Data(dropzone.GetDomElement(),"dropping")==="right"&&dropzone.GetDomElement()!==draggable.GetDomElement().previousSibling){focusAssigned=true;focusInput(txtPrimary);var draggableIndex=Fit.Dom.GetIndex(draggable.GetDomElement());var dropzoneIndex=Fit.Dom.GetIndex(dropzone.GetDomElement());var itemObject=itemCollectionOrdered[draggableIndex];Fit.Array.RemoveAt(itemCollectionOrdered,draggableIndex);Fit.Array.Insert(itemCollectionOrdered,draggableIndex<dropzoneIndex?dropzoneIndex:dropzoneIndex+1,itemObject);Fit.Dom.InsertAfter(dropzone.GetDomElement(),draggable.GetDomElement());fireChange=true}else if(Fit.Dom.Data(dropzone.GetDomElement(),"dropping")==="left"&&dropzone.GetDomElement().previousSibling!==draggable.GetDomElement()){focusAssigned=true;focusInput(txtPrimary);var draggableIndex=Fit.Dom.GetIndex(draggable.GetDomElement());var dropzoneIndex=Fit.Dom.GetIndex(dropzone.GetDomElement());var itemObject=itemCollectionOrdered[draggableIndex];Fit.Array.RemoveAt(itemCollectionOrdered,draggableIndex);Fit.Array.Insert(itemCollectionOrdered,draggableIndex<dropzoneIndex?dropzoneIndex-1:dropzoneIndex,itemObject);Fit.Dom.InsertBefore(dropzone.GetDomElement(),draggable.GetDomElement());fireChange=true}Fit.Dom.Data(dropZone.GetDomElement(),"dropping",null);dropZone=null;me._internal.Repaint();if(fireChange===true)fireOnChange()}function onDropZoneEnter(dropzone){dropZone=dropzone}function onDropZoneLeave(dropzone){Fit.Dom.Data(dropzone.GetDomElement(),"dropping",null);dropZone=null;me._internal.Repaint()}function decodeReserved(str){Fit.Validation.ExpectString(str);return str.replace(/%3B/g,";").replace(/%3D/g,"=")}function encodeReserved(str){Fit.Validation.ExpectString(str);return str.replace(/;/g,"%3B").replace(/=/g,"%3D")}function decode(str){Fit.Validation.ExpectString(str);return decodeURIComponent(str)}function encode(str){Fit.Validation.ExpectString(str);return encodeURIComponent(str)}function updateTextSelection(){var fireOnInputChangedEvent=false;if(fireOnInputChangedEvent===false&&prevValue!==""){me.ClearInput()}var text="";if(textSelectionCallback!==null){text=textSelectionCallback(me)}else{var selections=me.GetSelections();Fit.Array.ForEach(selections,function(selection){text+=(text!==""?", ":"")+Fit.String.StripHtml(selection.Title)});if(me.MultiSelectionMode()===true&&selections.length>0){text="("+selections.length+") "+text}}if(fireOnInputChangedEvent===true){if(txtPrimary.value!==text){txtPrimary.value=text;prevValue=text;fireOnInputChanged(text)}}else{txtPrimary.value=text}prevTextSelection=text!==""?text:null;if(Fit.Dom.GetFocused()===txtPrimary){Fit.Dom.SetCaretPosition(txtPrimary,0)}updatePlaceholder(true);clearTextSelectionOnInputChange=true}function updateInvalidMessageForSelectedItems(){Fit.Array.ForEach(itemCollection,function(key){var selection=itemCollection[key];if(selection.Valid===false){Fit.Dom.Attribute(selection.DomElement,"title",invalidMessage)}})}function localize(){if(invalidMessageChanged===false){var locale=Fit.Internationalization.GetLocale(me);invalidMessage=locale.Translations.InvalidSelection;updateInvalidMessageForSelectedItems()}}function fireOnInputChanged(val){Fit.Validation.ExpectString(val);updatePlaceholder();Fit.Array.ForEach(onInputChangedHandlers,function(handler){handler(me,val)})}function fireOnChange(){updatePlaceholder();optimizeDropDownPosition();me._internal.FireOnChange()}function fireOnPaste(val){Fit.Validation.ExpectString(val);var proceed=true;Fit.Array.ForEach(onPasteHandlers,function(handler){if(handler(me,val)===false)proceed=false});return proceed}function fireOnDropDownOpen(){Fit.Array.ForEach(onOpenHandlers,function(handler){handler(me)});if(picker!==null)picker._internal.FireOnShow()}function fireOnDropDownClose(){Fit.Array.ForEach(onCloseHandlers,function(handler){handler(me)});if(picker!==null)picker._internal.FireOnHide()}function postpone(cb,timeout){Fit.Validation.ExpectFunction(cb);Fit.Validation.ExpectInteger(timeout,true);var toId=setTimeout(function(){if(me!==null){cb()}},timeout||0);return function(){clearTimeout(toId)}}init()};Fit._internal.DropDown={};Fit._internal.DropDown.Current=null;Fit.Controls.PickerBase=function(){var me=this;var onShowHandlers=[];var onHideHandlers=[];var onChangingHandlers=[];var onChangeHandlers=[];var onCompleteHandlers=[];var onFocusHandlers=[];var onBlurHandlers=[];this.MaxHeight=function(value,unit){Fit.Validation.ExpectNumber(value,true);Fit.Validation.ExpectStringValue(unit,true);var elm=me.GetDomElement();if(Fit.Validation.IsSet(value)===true){if(value!==-1){elm.style.maxHeight=value+(Fit.Validation.IsSet(unit)===true?unit:"px")}else{elm.style.maxHeight=""}}var res={Value:-1,Unit:"px"};if(elm.style.maxHeight!==""){res.Value=parseFloat(elm.style.maxHeight);res.Unit=elm.style.maxHeight.replace(res.Value,"")}return res};this.OnShow=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onShowHandlers,cb)};this.OnHide=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onHideHandlers,cb)};this.OnItemSelectionChanging=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onChangingHandlers,cb)};this.OnItemSelectionChanged=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onChangeHandlers,cb)};this.OnItemSelectionComplete=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onCompleteHandlers,cb)};this.OnFocusIn=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onFocusHandlers,cb)};this.OnFocusOut=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onBlurHandlers,cb)};this.GetDomElement=function(){Fit.Validation.ThrowError("Function not implemented")};this.UpdateItemSelection=function(value,selected,programmaticallyChanged){Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectBoolean(programmaticallyChanged);if(me._internal.FireOnItemSelectionChanging("",value,!selected,programmaticallyChanged)===false)return false;me._internal.FireOnItemSelectionChanged("",value,selected,programmaticallyChanged)};this.SetSelections=function(items){Fit.Validation.ExpectArray(items);Fit.Array.ForEach(items,function(item){Fit.Validation.ExpectString(item.Title);Fit.Validation.ExpectString(item.Value)})};this.GetItemByValue=function(val){Fit.Validation.ExpectString(val);return null};this.RevealItemInView=function(val){Fit.Validation.ExpectString(val)};this.HandleEvent=function(e){Fit.Validation.ExpectEvent(e,true)};this.GetHighlighted=function(){return null};this.PersistView=function(val){return false};this.HighlightFirst=function(){return false};this.Destroy=function(){me=onShowHandlers=onHideHandlers=onChangingHandlers=onChangeHandlers=onCompleteHandlers=null};this._internal=this._internal?this._internal:{};this._internal.InitializePicker=function(){};this._internal.ReportFocused=function(value){};this._internal.FireOnShow=function(){Fit.Array.ForEach(onShowHandlers,function(handler){handler(me)})},this._internal.FireOnHide=function(){Fit.Array.ForEach(onHideHandlers,function(handler){handler(me)})},this._internal.FireOnItemSelectionChanging=function(title,value,selected,programmaticallyChanged){Fit.Validation.ExpectString(title);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectBoolean(programmaticallyChanged);var cancel=false;Fit.Array.ForEach(onChangingHandlers,function(handler){if(handler(me,{Title:title,Value:value,Selected:selected,ProgrammaticallyChanged:programmaticallyChanged})===false)cancel=true});return!cancel};this._internal.FireOnItemSelectionChanged=function(title,value,selected,programmaticallyChanged){Fit.Validation.ExpectString(title);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectBoolean(programmaticallyChanged);Fit.Array.ForEach(onChangeHandlers,function(handler){handler(me,{Title:title,Value:value,Selected:selected,ProgrammaticallyChanged:programmaticallyChanged})})};this._internal.FireOnItemSelectionComplete=function(){Fit.Array.ForEach(onCompleteHandlers,function(handler){handler(me)})};this._internal.FireOnFocusIn=function(){Fit.Array.ForEach(onFocusHandlers,function(handler){handler(me)})};this._internal.FireOnFocusOut=function(){Fit.Array.ForEach(onBlurHandlers,function(handler){handler(me)})}};Fit.Controls.WSDropDown=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.DropDown).Apply(ctlId);var me=this;var list=null;var tree=null;var actionMenu=null;var search="";var forceNewSearch=false;var hideLinesForFlatData=true;var dataRequested=false;var dataLoading=false;var requestCount=0;var onDataLoadedCallback=[];var suppressTreeOnOpen=false;var timeOut=null;var currentRequest=null;var classes=null;var autoUpdatedSelections=null;var useActionMenu=false;var useActionMenuForced=false;var useActionMenuAfterLoad=true;var useActionMenuSortingLocale=null;var useActionMenuHtmlAllowed=false;var treeViewEnabled=true;var orgPlaceholder=this.Placeholder;var customPlaceholderSet=false;var translations=null;var onRequestHandlers=[];var onResponseHandlers=[];var onAbortHandlers=[];function init(){me.OnInputChanged(function(sender,value){if(me.Focused()===true)searchData(value)});var cmdOpen=me.GetDomElement().firstChild.children[me.GetDomElement().firstChild.children.length-1];classes=cmdOpen.className;list=new Fit.Controls.WSListView(me.GetId()+"__WSListView");list.OnRequest(function(sender,eventArgs){if(fireEventHandlers(onRequestHandlers,list,eventArgs)===false)return false;requestCount++;currentRequest=eventArgs.Request;cmdOpen.className="fa fa-refresh fa-spin"});list.OnResponse(function(sender,eventArgs){requestCount--;fireEventHandlers(onResponseHandlers,list,eventArgs);cmdOpen.className=classes;currentRequest=null;if(forceNewSearch===true){forceNewSearch=false;eventArgs.Items=[];searchData(me.GetInputValue())}});list.OnAbort(function(sender,eventArgs){requestCount--});list.OnItemSelectionChanging(function(sender,item){var node=tree.GetChild(item.Value,true);if(node!==null&&node.Selectable()===false)return false});list.OnItemSelectionChanged(function(sender,item){if(item.Selected===true)me.CloseDropDown()});tree=new Fit.Controls.WSTreeView(me.GetId()+"__WSTreeView");tree.Selectable(true);tree.Width(100,"%");tree.OnRequest(function(sender,eventArgs){if(fireEventHandlers(onRequestHandlers,tree,eventArgs)===false){return false}dataRequested=true;requestCount++;if(dataLoading===true){cmdOpen.className="fa fa-refresh fa-spin"}});tree.OnResponse(function(sender,eventArgs){requestCount--;fireEventHandlers(onResponseHandlers,tree,eventArgs);if(requestCount===0){cmdOpen.className=classes;if(dataLoading===false){fireOnDataLoaded()}}});tree.OnAbort(function(sender,eventArgs){requestCount--;fireEventHandlers(onAbortHandlers,tree,eventArgs);if(requestCount===0){cmdOpen.className=classes;if(dataLoading===false){fireOnDataLoaded()}}});tree.OnPopulated(function(sender,eventArgs){if(hideLinesForFlatData===true&&tree.Lines()===true){var hasChildren=false;Fit.Array.ForEach(tree.GetChildren(),function(c){if(c.GetChildren().length>0){hasChildren=true;return false}});if(hasChildren===false){tree.Lines(false)}hideLinesForFlatData=false}if(eventArgs.Node===null&&me.MultiSelectionMode()===false&&me.GetSelections().length===1){tree.RevealItemInView(me.GetSelections()[0].Value)}});tree.OnSelectAll(function(sender,eventArgs){if(me.GetPicker()!==tree)me.SetPicker(tree)});me.SetPicker(list);me.SetPicker(tree);me.SetPicker(null);var updateItemSelectionTree=tree.UpdateItemSelection;var updateItemSelectionList=list.UpdateItemSelection;var updateItemSelectionOverride=function(value,selected,programmaticallyChanged){updateItemSelectionTree(value,selected,programmaticallyChanged);updateItemSelectionList(value,selected,programmaticallyChanged)};tree.UpdateItemSelection=updateItemSelectionOverride;list.UpdateItemSelection=updateItemSelectionOverride;var skipUpdateActionMenuOnChange=false;actionMenu=new Fit.Controls.ListView(me.GetId()+"__ActionsListView");actionMenu.HtmlAllowed(true);actionMenu.OnSelect(function(sender,item){if(item.Value==="SearchMore"){me._internal.ClearInputForSearch()}else if(item.Value==="ShowAll"){me._internal.UndoClearInputForSearch();useActionMenuAfterLoad=false;me.SetPicker(tree);ensureTreeViewData()}else if(item.Value==="RemoveAll"){skipUpdateActionMenuOnChange=true;me.ClearSelections();skipUpdateActionMenuOnChange=false;updateActionMenu()}else if(item.Value.indexOf("Remove:")===0){var dataValue=item.Value.replace("Remove:","");var above=null;var below=null;if(Fit.Browser.GetInfo().IsMobile===false&&Fit.Events.GetPointerState().Buttons.Primary===false){var items=actionMenu.GetItems();var stopNext=false;for(var i=0;i<items.length;i++){if(items[i].Value.indexOf("Remove:")!==0){continue}if(items[i].Value.replace("Remove:","")===dataValue){stopNext=true;continue}if(stopNext===false){above=items[i].Value}else{below=items[i].Value;break}}}skipUpdateActionMenuOnChange=true;me.RemoveSelection(dataValue);skipUpdateActionMenuOnChange=false;actionMenu.RemoveItem(item.Value);if(me.GetSelections().length===1){updateActionMenu()}if(above!==null||below!==null){actionMenu.RevealItemInView(below!==null?below:above)}}return false});me.OnChange(function(sender){if(skipUpdateActionMenuOnChange===false){updateActionMenu()}});me.OnOpen(function(){if(suppressTreeOnOpen===true){suppressTreeOnOpen=false;return}var onlyTheShowAllOptionIsDisplayedInActionMenu=actionMenu.GetItems().length===1&&actionMenu.HasItem("ShowAll")===true;if(useActionMenu===true&&onlyTheShowAllOptionIsDisplayedInActionMenu===false){me.SetPicker(actionMenu)}else{if(onlyTheShowAllOptionIsDisplayedInActionMenu===true){useActionMenuAfterLoad=false}if(treeViewEnabled===true){me.SetPicker(tree);ensureTreeViewData()}else{list.RemoveItems()}}});Fit.Internationalization.OnLocaleChanged(localize);localize()}this.AddSelection=Fit.Core.CreateOverride(this.AddSelection,function(title,value,valid){Fit.Validation.ExpectString(title);Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(valid,true);base(title,value,valid);if(me.GetPicker()!==tree){tree.SetNodeSelection(value,true)}});this.RemoveSelection=Fit.Core.CreateOverride(this.RemoveSelection,function(value){Fit.Validation.ExpectString(value);base(value);if(me.GetPicker()!==tree){tree.SetNodeSelection(value,false)}});this.Value=Fit.Core.CreateOverride(this.Value,function(value){Fit.Validation.ExpectString(value,true);var val=base(value);if(Fit.Validation.IsSet(value)===true&&me.GetPicker()!==tree){tree.SetSelections(me.GetSelections())}return val});this.ClearSelections=Fit.Core.CreateOverride(this.ClearSelections,function(){base();if(me.GetPicker()!==tree){tree.Clear()}});this.AutoUpdateSelected=function(cb){Fit.Validation.ExpectFunction(cb,true);if(me.GetSelections().length===0){if(Fit.Validation.IsSet(cb)===true){cb(me,[])}return}if(requestCount>0){onDataLoaded(function(){me.AutoUpdateSelected(cb)});return}if(autoUpdatedSelections!==null){if(Fit.Validation.IsSet(cb)===true){cb(me,Fit.Core.Clone(autoUpdatedSelections))}return}dataLoading=true;var ensure=function(){tree.EnsureData(function(sender){me.SetPicker(tree);autoUpdatedSelections=me.UpdateSelected();dataLoading=false;showActionMenuIfNoDataReceivedOrOnFirstInteractionIfEnabled();if(Fit.Validation.IsSet(cb)===true){cb(me,Fit.Core.Clone(autoUpdatedSelections))}fireOnDataLoaded()})};if(dataRequested===false){tree.Reload(true,function(sender){ensure()})}else{ensure()}};this.Url=function(wsUrl){Fit.Validation.ExpectString(wsUrl,true);if(Fit.Validation.IsSet(wsUrl)===true){list.Url(wsUrl);tree.Url(wsUrl)}return list.Url()};this.JsonpCallback=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true||val===null){list.JsonpCallback(val);tree.JsonpCallback(val)}return list.JsonpCallback()};this.ClearData=function(cb){clearData(true,true,cb)};this.ReloadData=function(cb){clearData(false,false,function(){ensureTreeViewData(function(){updateActionMenu();cb&&cb(me)})})};this.MultiSelectionMode=Fit.Core.CreateOverride(this.MultiSelectionMode,function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){tree.Selectable(true,val)}return base(val)});this.HtmlAllowed=Fit.Core.CreateOverride(this.HtmlAllowed,function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){tree.HtmlAllowed(val);list.HtmlAllowed(val);me.ActionMenuHtmlAllowed(val);base(val)}return base()});this.InputEnabled=Fit.Core.CreateOverride(this.InputEnabled,function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&base()!==val){base(val);localize();if(val===false&&me.GetPicker()===list){me.SetPicker(null)}}return base()});this.TreeViewEnabled=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==treeViewEnabled){treeViewEnabled=val;if(useActionMenuForced===false){if(val===true){var isWaitingForData=dataRequested===false||dataLoading===true;useActionMenu=isWaitingForData===true||tree.GetChildren().length===0}else{useActionMenu=true}}if(val===false&&me.GetPicker()===tree){me.SetPicker(null)}updateActionMenu()}return treeViewEnabled};this.ListViewEnabled=function(val){Fit.Validation.ExpectBoolean(val,true);return me.InputEnabled(val)};this.SearchModeOnFocus=Fit.Core.CreateOverride(this.SearchModeOnFocus,function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==base()){base(val);updateActionMenu()}return base()});this.Placeholder=function(val){Fit.Validation.ExpectString(val,true);customPlaceholderSet=true;return orgPlaceholder(val)};this.OpenDropDown=Fit.Core.CreateOverride(this.OpenDropDown,function(){if(me.InputEnabled()===true&&me.GetInputValue()===""&&me.GetSelections().length===0&&treeViewEnabled===false){if(Fit.Browser.GetInfo().IsMobile===true){me._internal.ForceFocusMobile()}return}base()});this.GetListView=function(){return list};this.GetTreeView=function(){return tree};this.UseActionMenu=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){useActionMenuForced=true;if(val!==useActionMenu){useActionMenu=val;if(val===true){updateActionMenu();if(me.IsDropDownOpen()===true){me.SetPicker(actionMenu)}}else{if(me.GetPicker()===actionMenu){me.SetPicker(tree.GetChildren().length>0?tree:list)}}}}return useActionMenu};this.ActionMenuSortingLocale=function(val){Fit.Validation.ExpectString(val!==null?val:"",true);if(Fit.Validation.IsSet(val)===true||val===null){useActionMenuSortingLocale=val;updateActionMenu()}return useActionMenuSortingLocale};this.ActionMenuHtmlAllowed=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==useActionMenuHtmlAllowed){useActionMenuHtmlAllowed=val;updateActionMenu()}return useActionMenuHtmlAllowed};this.ResetActionMenu=function(){useActionMenuForced=false;useActionMenu=false;useActionMenuAfterLoad=true};this.UpdateActionMenu=function(){updateActionMenu()};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){me.SetPicker(null);list.Destroy();tree.Destroy();actionMenu.Destroy();cancelSearch();Fit.Internationalization.RemoveOnLocaleChanged(localize);me=list=tree=actionMenu=search=forceNewSearch=hideLinesForFlatData=dataRequested=dataLoading=requestCount=onDataLoadedCallback=suppressTreeOnOpen=timeOut=currentRequest=classes=autoUpdatedSelections=useActionMenu=useActionMenuForced=useActionMenuAfterLoad=useActionMenuSortingLocale=useActionMenuHtmlAllowed=treeViewEnabled=orgPlaceholder=customPlaceholderSet=translations=onRequestHandlers=onResponseHandlers=onAbortHandlers=null;base()});this.OnRequest=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onRequestHandlers,cb)};this.OnResponse=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onResponseHandlers,cb)};this.OnAbort=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onAbortHandlers,cb)};function ensureTreeViewData(cb){Fit.Validation.ExpectFunction(cb,true);if(dataRequested===false){dataLoading=true;tree.Reload(true,function(sender){dataLoading=false;showActionMenuIfNoDataReceivedOrOnFirstInteractionIfEnabled();if(Fit.Validation.IsSet(cb)===true){cb(me)}fireOnDataLoaded()})}}function clearData(allowImmediateReload,refreshActionMenu,cb){Fit.Validation.ExpectBoolean(allowImmediateReload);Fit.Validation.ExpectBoolean(refreshActionMenu);Fit.Validation.ExpectFunction(cb,true);if(requestCount>0){onDataLoaded(function(){me.ClearData(cb)});return}hideLinesForFlatData=true;dataRequested=false;autoUpdatedSelections=null;refreshActionMenu&&updateActionMenu();cancelSearch();if(Fit.Validation.IsSet(cb)===true){cb(me)}if(allowImmediateReload===true&&me.IsDropDownOpen()===true&&me.GetPicker()===tree){ensureTreeViewData()}}function showActionMenuIfNoDataReceivedOrOnFirstInteractionIfEnabled(){if(useActionMenuForced===false){useActionMenu=tree.GetChildren().length===0}if(useActionMenu===true){updateActionMenu();if(useActionMenuAfterLoad===true||tree.GetChildren().length===0){me.SetPicker(actionMenu)}}}function searchData(value){cancelSearch();if(currentRequest!==null){forceNewSearch=true;return}search=value;if(search!==""){list.RemoveItems();me.SetPicker(list);timeOut=setTimeout(function(){if(me.IsDropDownOpen()===false){suppressTreeOnOpen=true;me.OpenDropDown()}list.Reload();timeOut=null},500)}}function cancelSearch(){if(timeOut!==null){clearTimeout(timeOut);timeOut=null}}function updateActionMenu(){if(useActionMenu===false&&me.GetPicker()!==actionMenu){return}var searchIcon="<span class='FitUiControlDropDownActionMenuItemIcon FitUiControlDropDownActionMenuItemIconSearch fa fa-search'></span> ";var showAllIcon="<span class='FitUiControlDropDownActionMenuItemIcon FitUiControlDropDownActionMenuItemIconShowAll fa fa-sitemap'></span> ";var delIcon="<span class='FitUiControlDropDownActionMenuItemIcon FitUiControlDropDownActionMenuItemIconDelete fa fa-times'></span> ";var selectedItems=me.GetSelections();var addRemoveAll=selectedItems.length>1;actionMenu.RemoveItems();if(me.InputEnabled()===true&&me.SearchModeOnFocus()===false){actionMenu.AddItem(searchIcon+translations.SearchMore,"SearchMore")}if(treeViewEnabled===true){var isWaitingForData=dataRequested===false||dataLoading===true;if(isWaitingForData===true||tree.GetChildren().length>0){actionMenu.AddItem(showAllIcon+translations.ShowAllOptions,"ShowAll")}else{actionMenu.AddItem(showAllIcon+"<i>"+translations.NoneAvailable+"</i>","ShowAllNoneFound")}}if(addRemoveAll===true){actionMenu.AddItem(delIcon+translations.RemoveAll,"RemoveAll")}if(useActionMenuSortingLocale!==null){if("".localeCompare){selectedItems=selectedItems.sort(function(a,b){return a.Title.localeCompare(b.Title,useActionMenuSortingLocale)})}else{selectedItems=selectedItems.sort(function(a,b){var titleA=a.Title.toLowerCase();var titleB=b.Title.toLowerCase();return titleA===titleB?0:titleA>titleB?1:-1})}}Fit.Array.ForEach(selectedItems,function(item){actionMenu.AddItem((addRemoveAll===true?" &nbsp; &nbsp; &nbsp; ":"")+delIcon+translations.Remove+" "+(useActionMenuHtmlAllowed===false?Fit.String.StripHtml(item.Title):item.Title),"Remove:"+item.Value)})}function localize(){var locale=Fit.Internationalization.GetLocale(me);translations=locale.Translations;updateActionMenu();if(customPlaceholderSet===false){orgPlaceholder(me.InputEnabled()===true?translations.Search:"")}}function onDataLoaded(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onDataLoadedCallback,cb)}function fireOnDataLoaded(){var orgOnDataLoadedCallback=onDataLoadedCallback;onDataLoadedCallback=[];Fit.Array.ForEach(orgOnDataLoadedCallback,function(cb){cb()})}function fireEventHandlers(handlers,picker,eventArgs){var cancel=false;Fit.Array.ForEach(handlers,function(cb){var data=null;var searchValue=Fit.Core.InstanceOf(picker,Fit.Controls.WSListView)===true?search:"";if(eventArgs.Children){data=eventArgs.Children}else if(eventArgs.Items){data=eventArgs.Items}var newArgs={Sender:me,Picker:picker,Node:eventArgs.Node?eventArgs.Node:null,SelectAll:eventArgs.SelectAll,Search:searchValue,Data:data,Request:eventArgs.Request};if(cb(me,newArgs)===false)cancel=true;if(eventArgs.Children)eventArgs.Children=newArgs.Data;else if(eventArgs.Items)eventArgs.Items=newArgs.Data;if(newArgs.Request!==eventArgs.Request){Fit.Validation.ExpectInstance(newArgs.Request,Fit.Http.Request);eventArgs.Request=newArgs.Request}});return!cancel}init()};(function(){var locale={en:{Translations:{InvalidSelection:"Invalid selection",Search:"Search..",SearchMore:"Search for options",ShowAllOptions:"Show available options",RemoveAll:"Remove all selected",Remove:"Remove",NoneAvailable:"List with options is empty"}},da:{Translations:{InvalidSelection:"Ugyldigt valg",Search:"Søg..",SearchMore:"Søg efter valgmuligheder",ShowAllOptions:"Vis tilgængelige valgmuligheder",RemoveAll:"Fjern alle valgte",Remove:"Fjern",NoneAvailable:"Liste med valgmuligheder er tom"}},de:{Translations:{InvalidSelection:"Ungültige Auswahl",Search:"Suchen..",SearchMore:"Nach Optionen suchen",ShowAllOptions:"Verfügbare Optionen anzeigen",RemoveAll:"Alle ausgewählten entfernen",Remove:"Entfernen",NoneAvailable:"Liste der Optionen ist leer"}},no:{Translations:{InvalidSelection:"Ugyldig valg",Search:"Søk..",SearchMore:"Søk etter alternativer",ShowAllOptions:"Vis alle tilgjengelige alternativer",RemoveAll:"Fjern alle valgte",Remove:"Fjern",NoneAvailable:"Ingen alternativer tilgjengelig"}}};Fit.Internationalization.AddLocalization(Fit.Controls.DropDown,locale);Fit.Internationalization.AddLocalization(Fit.Controls.WSDropDown,locale)})();Fit.Controls.FilePicker=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.ControlBase).Apply(ctlId);var me=this;var button=null;var buttonTitleEnforced=null;var input=null;var width={Value:-1,Unit:"px"};var url=null;var files=[];var autoUpload=false;var inputs=[];var inputsByFileId={};var dropZoneLabel=null;var dropZoneLabelEnforced=null;var dropZoneContainer=null;var onUploadHandlers=[];var onProgressHandlers=[];var onSuccessHandlers=[];var onFailureHandlers=[];var onCompletedHandlers=[];function init(){createUploadField();if(inputs.length===0){button=new Fit.Controls.Button("Button"+me.GetId());button.Icon("upload");button.OnClick(function(sender){input.click()});Fit.Dom.Add(button.GetDomElement(),input);me._internal.AddDomElement(button.GetDomElement())}me.AddCssClass("FitUiControlFilePicker");me.Width(-1);me.Enabled(true);me._internal.Data("legacy",(inputs.length>0).toString());me._internal.Data("dropzone","false");Fit.Internationalization.OnLocaleChanged(localize);localize()}function createUploadField(){var inp=document.createElement("input");inp.type="file";inp.name="SelectedFiles"+me.GetId()+"[]";inp.onchange=function(e){if(inputs.length===0){setValueFromFilesList(inp.files)}else{files=[];inputsByFileId={};Fit.Array.ForEach(Fit.Array.Copy(inputs),function(i){if(i.value===""){if(me.MultiSelectionMode()===true){Fit.Dom.Remove(i);Fit.Array.Remove(inputs,i)}return}var file=null;if(me.MultiSelectionMode()===true&&i._file!==undefined&&i._file.Processed===true){file=i._file}else{file=createFileInfo(i.value.replace(/^C:\\fakepath\\/,""),"Unknown",-1,null)}i._file=file;Fit.Array.Add(files,file);inputsByFileId[file.Id]=i});if(me.MultiSelectionMode()===true)createUploadField();me._internal.FireOnChange();if(me.AutoUpload()===true)me.Upload()}};if(inp.files&&!Fit.Controls.FilePicker.ForceLegacyMode){input=inp;input.tabIndex=-1;Fit.Events.AddHandler(input,"click",function(e){Fit.Events.StopPropagation(e)})}else{Fit.Array.Add(inputs,inp);me._internal.AddDomElement(inp)}}function setValueFromFilesList(fileList){Fit.Validation.ExpectInstance(fileList,FileList);files=[];Fit.Array.ForEach(fileList,function(file){Fit.Array.Add(files,createFileInfo(file.name,file.type,file.size,file));if(me.MultiSelectionMode()===false)return false});me._internal.FireOnChange();if(me.AutoUpload()===true)me.Upload()}this.Focused=function(focus){Fit.Validation.ExpectBoolean(focus,true);if(Fit.Validation.IsSet(focus)===true){if(inputs.length===0){if(focus===true)input.focus();else input.blur()}else{if(focus===true)inputs[0].focus();else inputs[0].blur()}}return Fit.Dom.GetFocused()===input};this.Value=function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){Fit.Validation.ThrowError("SecurityError: Due to security restrictions, the value of an upload control cannot be set")}var strFiles="";Fit.Array.ForEach(files,function(file){strFiles+=(strFiles!==""?";":"")+file.Filename});return strFiles};this.IsDirty=function(){return files.length>0};this.Clear=function(){if(files.length===0)return;if(inputs.length===0){input.value="";input.onchange(null)}else{Fit.Array.ForEach(Fit.Array.Copy(inputs),function(i){Fit.Dom.Remove(i);Fit.Array.Remove(inputs,i)});createUploadField();inputs[0].onchange(null)}};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){Fit.Internationalization.RemoveOnLocaleChanged(localize);if(button!==null){button.Dispose()}me=button=buttonTitleEnforced=input=width=url=files=autoUpload=inputs=inputsByFileId=dropZoneLabel=dropZoneLabelEnforced=dropZoneContainer=onUploadHandlers=onProgressHandlers=onSuccessHandlers=onFailureHandlers=onCompletedHandlers=null;base()});this.Width=Fit.Core.CreateOverride(this.Width,function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){if(val>-1){width=base(val,unit);if(inputs.length===0&&me.ShowDropZone()===false)button.Width(100,"%")}else{width={Value:-1,Unit:"px"};me.GetDomElement().style.width="auto";if(inputs.length===0&&me.ShowDropZone()===false)button.Width(-1)}}return width});this.Height=Fit.Core.CreateOverride(this.Height,function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true&&inputs.length===0){base(val,unit);if(me.ShowDropZone()===false){if(val>-1)button.Height(100,"%");else button.Height(-1)}}return base()});this.Url=function(val){Fit.Validation.ExpectStringValue(val,true);if(Fit.Validation.IsSet(val)===true){url=val}return url};this.ButtonText=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){buttonTitleEnforced=val;if(button!==null){button.Title(val);Fit.Dom.Add(button.GetDomElement(),input)}}return button!==null?button.Title():buttonTitleEnforced||""};this.Title=function(val){Fit.Browser.LogDeprecated("Use of deprecated function Title(..) on instance of Fit.Controls.FilePicker - please use ButtonText(..) instead");return me.ButtonText(val)};this.DropZoneText=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){dropZoneLabelEnforced=val;if(dropZoneLabel!==null)dropZoneLabel.innerHTML=val}return dropZoneLabel!==null?dropZoneLabel.innerHTML:dropZoneLabelEnforced||""};this.GetFiles=function(){return files};this.MultiSelectionMode=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(inputs.length===0){if(val===true&&me.MultiSelectionMode()===false){input.multiple="multiple"}else if(val===false&&me.MultiSelectionMode()===true){if(files.length>1)me.Clear();input.multiple=""}}else{me.Clear()}me._internal.Data("multiple",val.toString());localize()}return me._internal.Data("multiple")==="true"};this.Enabled=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==me.Enabled()){me._internal.Data("enabled",val.toString());if(val===false){me.Focused(false)}if(inputs.length===0){input.disabled=!val;button.Enabled(val)}else{Fit.Array.ForEach(inputs,function(inp){inp.disabled=!val;if(me.MultiSelectionMode()===true&&val===true&&inp._file!==undefined&&inp._file.Processed===true)inp.disabled=true})}me._internal.UpdateInternalState();me._internal.Repaint()}return me._internal.Data("enabled")==="true"};this.ShowDropZone=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&inputs.length===0){if(val===true&&dropZoneLabel===null){dropZoneLabel=Fit.Dom.CreateElement("<div></div>");dropZoneContainer=Fit.Dom.CreateElement("<div></div>");me.GetDomElement().ondragleave=function(e){me._internal.Data("dropping","false")};me.GetDomElement().ondragover=function(e){var ev=Fit.Events.GetEvent(e);Fit.Events.PreventDefault(ev);me._internal.Data("dropping","true")};me.GetDomElement().ondrop=function(e){var ev=Fit.Events.GetEvent(e);Fit.Events.PreventDefault(ev);setValueFromFilesList(ev.dataTransfer.files);me._internal.Data("dropping","false")};button.Width(-1);button.Height(-1);Fit.Dom.Add(dropZoneContainer,dropZoneLabel);Fit.Dom.Add(dropZoneContainer,button.GetDomElement());Fit.Dom.Add(me.GetDomElement(),dropZoneContainer);localize();me._internal.Data("dropping","false");me._internal.Data("dropzone","true")}else if(val===false&&dropZoneLabel!==null){me.GetDomElement().ondragleave=null;me.GetDomElement().ondragover=null;me.GetDomElement().ondrop=null;button.Width(me.Width().Value,me.Width().Unit);button.Height(me.Height().Value,me.Height().Unit);Fit.Dom.Remove(dropZoneContainer);Fit.Dom.Add(me.GetDomElement(),button.GetDomElement());dropZoneLabel=null;dropZoneContainer=null;me._internal.Data("dropping",null);me._internal.Data("dropzone","false")}}return dropZoneLabel!==null};this.IsLegacyModeEnabled=function(){return inputs.length>0};this.AutoUpload=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){autoUpload=val}return autoUpload};this.Upload=function(skip){Fit.Validation.ExpectTypeArray(skip,Fit.Validation.ExpectStringValue,true);if(url===null)Fit.Validation.ThrowError("Unable to upload file(s), no URL has been specified");if(me.Enabled()===false)return;var filesToUpload=[];Fit.Array.ForEach(files,function(file){if(Fit.Validation.IsSet(skip)===false||Fit.Array.Contains(skip,file.Filename)===false){if(file.Processed===true)return;Fit.Array.Add(filesToUpload,file)}});if(filesToUpload.length===0)return;if(fireEvent(onUploadHandlers)===false)return;var completed=[];Fit.Array.ForEach(filesToUpload,function(file){file.Processed=true;if(inputs.length===0){var data=new FormData;data.append("SelectedFile",file.FileObject);var req=new XMLHttpRequest;Fit.Events.AddHandler(req.upload,"progress",function(e){var ev=Fit.Events.GetEvent(e);fireEvent(onProgressHandlers,file,ev.loaded>0&&ev.total>0?Math.floor(ev.loaded/ev.total*100):0)});Fit.Events.AddHandler(req,"readystatechange",function(e){if(req.readyState===4){if(req.status===200){file.ServerResponse=req.responseText;Fit.Array.Add(completed,file);fireEvent(onSuccessHandlers,file)}else{Fit.Array.Add(completed,file);fireEvent(onFailureHandlers,file)}if(completed.length===filesToUpload.length)fireEvent(onCompletedHandlers)}});req.open("POST",url);req.send(data)}else{var enforcedOnModernBrowser=Fit.Browser.GetInfo().Name!=="MSIE"||Fit.Browser.GetInfo().Version>8;var picker=inputsByFileId[file.Id];var iFrame=null;var form=null;var progress=0;var interval=null;iFrame=document.createElement("iframe");iFrame.name="iFrame"+Fit.Data.CreateGuid();iFrame.style.display="none";if(enforcedOnModernBrowser===true){Fit.Dom.InsertAfter(picker,iFrame)}Fit.Events.AddHandler(iFrame,"load",function(e){try{file.ServerResponse=iFrame.contentDocument.body.innerHTML}catch(err){Fit.Browser.Log("Unable to read server response, most likely due to violation of Same-Origin Policy")}Fit.Dom.Remove(iFrame);clearInterval(interval);Fit.Array.Add(completed,file);fireEvent(onProgressHandlers,file,100);fireEvent(onSuccessHandlers,file);if(completed.length===filesToUpload.length)fireEvent(onCompletedHandlers)});if(enforcedOnModernBrowser===false){Fit.Dom.InsertAfter(picker,iFrame)}form=document.createElement("form");form.action=url;form.method="POST";form.setAttribute("enctype","multipart/form-data");form.target=iFrame.name;Fit.Dom.InsertAfter(picker,form);form.appendChild(picker);form.submit();Fit.Dom.InsertBefore(iFrame,picker);Fit.Dom.Remove(form);interval=setInterval(function(){if(me===null){clearInterval(interval);return}progress=progress+5;fireEvent(onProgressHandlers,file,progress);if(progress===90)clearInterval(interval)},1e3);if(me.MultiSelectionMode()===true)picker.disabled=true}})};function localize(){if(inputs.length>0)return;var locale=Fit.Internationalization.GetLocale(me);if(buttonTitleEnforced===null){var buttonTitle=me.MultiSelectionMode()===true?locale.SelectFiles:locale.SelectFile;button.Title(buttonTitle)}if(dropZoneLabel!==null){var dzText=dropZoneLabelEnforced!==null?dropZoneLabelEnforced:me.MultiSelectionMode()===true?locale.DropFiles:locale.DropFile;dropZoneLabel.innerHTML=dzText}}function getImagePreview(file){if(inputs.length>0)return null;if(file.type==="image/png"||file.type==="image/jpg"||file.type==="image/jpeg"||file.type==="image/svg"||file.type==="image/gif"){var img=new Image;setTimeout(function(){var fr=new FileReader;fr.onload=function(e){var ev=Fit.Events.GetEvent(e);img.src=ev.target.result};fr.readAsDataURL(file)},0);return img}return null}function fireEvent(handlers,file,progress){var canceled=false;Fit.Array.ForEach(handlers,function(cb){if(Fit.Validation.IsSet(file)===true){var eventArgs=cloneFileInfo(file);eventArgs.Progress=100;if(Fit.Validation.IsSet(progress)===true)eventArgs.Progress=progress;if(cb(me,eventArgs)===false)canceled=true}else{if(cb(me)===false)canceled=true}});return!canceled}function createFileInfo(filename,type,size,fileObject){Fit.Validation.ExpectString(filename);Fit.Validation.ExpectString(type);Fit.Validation.ExpectNumber(size);Fit.Validation.ExpectInstance(fileObject,File,true);return{Filename:filename,Type:type,Size:size,Id:Fit.Data.CreateGuid(),Processed:false,Progress:-1,FileObject:fileObject||null,GetImagePreview:function(){return getImagePreview(fileObject)},ServerResponse:null}}function cloneFileInfo(file){return{Filename:file.Filename,Type:file.Type,Size:file.Size,Id:file.Id,Processed:file.Processed,Progress:file.Progress,FileObject:file.FileObject,GetImagePreview:file.GetImagePreview,ServerResponse:file.ServerResponse}}this.OnUpload=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onUploadHandlers,cb)};this.OnProgress=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onProgressHandlers,cb)};this.OnSuccess=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSuccessHandlers,cb)};this.OnFailure=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onFailureHandlers,cb)};this.OnCompleted=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onCompletedHandlers,cb)};init()};Fit.Internationalization.AddLocalization(Fit.Controls.FilePicker,{en:{SelectFile:"Select file",SelectFiles:"Select files",DropFile:"Drag and drop file here, or",DropFiles:"Drag and drop files here, or"},da:{SelectFile:"Vælg fil",SelectFiles:"Vælg filer",DropFile:"Træk og slip fil her, eller",DropFiles:"Træk og slip filer her, eller"},de:{SelectFile:"Datei aussuchen",SelectFiles:"Dateien auswählen",DropFile:"Zieh deine Datei hierher und lege sie ab, oder",DropFiles:"Zieh deine Dateien hierher und lege sie ab, oder"},no:{SelectFile:"Velg fil",SelectFiles:"Velg filer",DropFile:"Dra og slipp fil her, eller",DropFiles:"Dra og slipp filer her, eller"}});Fit.Controls.Input=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.ControlBase).Apply(ctlId);var me=this;var orgVal="";var preVal="";var input=null;var changeObserverId=-1;var cmdResize=null;var designEditor=null;var designEditorDom=null;var designEditorDirty=false;var designEditorDirtyPending=false;var designEditorConfig=null;var designEditorReloadConfig=null;var designEditorRestoreButtonState=null;var designEditorSuppressPaste=false;var designEditorSuppressOnResize=false;var designEditorMustReloadWhenReady=false;var designEditorMustDisposeWhenReady=false;var designEditorUpdateSizeDebouncer=-1;var designEditorHeightMonitorId=-1;var designEditorActiveToolbarPanel=null;var designEditorDetached=null;var designEditorClearPlaceholder=true;var designEditorCleanEditableDom=false;var designEditorGlobalKeyDownEventId=-1;var designEditorGlobalKeyUpEventId=-1;var wasAutoChangedToMultiLineMode=false;var minimizeHeight=-1;var maximizeHeight=-1;var minMaxUnit=null;var maximizeHeightConfigured=-1;var resizable=Fit.Controls.InputResizing.Disabled;var nativeResizableAvailable=false;var mutationObserverId=-1;var rootedEventId=-1;var createWhenReadyIntervalId=-1;var isIe8=Fit.Browser.GetInfo().Name==="MSIE"&&Fit.Browser.GetInfo().Version===8;var debounceOnChangeTimeout=-1;var debouncedOnChange=null;var imageBlobUrls=[];var locale=null;function init(){input=document.createElement("input");input.type="text";input.autocomplete="off";input.spellcheck=true;input.onkeyup=function(){if(designEditorClearPlaceholder===true){designEditorClearPlaceholder=false;updateDesignEditorPlaceholder(true)}if(debounceOnChangeTimeout===-1){fireOnChange()}else{if(debouncedOnChange===null){debouncedOnChange=Fit.Core.CreateDebouncer(fireOnChange,debounceOnChangeTimeout)}debouncedOnChange.Invoke()}if(me.Maximizable()===true){var scrollContainer=designEditorDom&&designEditorDom.Editable||input;var autoScrollToBottom=scrollContainer.scrollTop+scrollContainer.clientHeight>scrollContainer.scrollHeight-15;if(autoScrollToBottom===true){scrollContainer.scrollTop+=99}}};input.onchange=function(){if(me===null){return}input.onkeyup()};me._internal.AddDomElement(input);me.AddCssClass("FitUiControlInput");me._internal.Data("multiline","false");me._internal.Data("maximizable","false");me._internal.Data("maximized","false");me._internal.Data("resizable",resizable.toLowerCase());me._internal.Data("resized","false");me._internal.Data("designmode","false");Fit.Internationalization.OnLocaleChanged(localize);localize();me.OnBlur(function(sender){hideToolbarInDesignMode();if(debouncedOnChange!==null){debouncedOnChange.Cancel()}fireOnChange()});me.OnFocus(function(sender){restoreHiddenToolbarInDesignEditor();if(me.Type()==="Color"){changeObserverId=setInterval(function(){input.onkeyup()},100)}});me.OnBlur(function(sender){restoreDesignEditorButtons();updateDesignEditorPlaceholder();if(changeObserverId!==-1){clearInterval(changeObserverId);changeObserverId=-1}});Fit.Events.AddHandler(me.GetDomElement(),"paste",true,function(e){if(me.DesignMode()===true&&designEditorSuppressPaste===true){Fit.Events.Stop(e)}});Fit.Events.AddHandler(me.GetDomElement(),"contextmenu",true,function(e){if(me.DesignMode()===true){var ev=Fit.Events.GetEvent(e);var target=Fit.Events.GetTarget(ev);if(isTable(target)===false){Fit.Events.StopPropagation(ev)}}});Fit.Events.AddHandler(me.GetDomElement(),"keydown",true,function(e){if(me.DesignMode()===true){var ev=Fit.Events.GetEvent(e);if(ev.shiftKey===true&&ev.keyCode===121||ev.keyCode===93){Fit.Events.StopPropagation(ev)}}});try{nativeResizableAvailable=window.MouseEvent&&new MouseEvent("mousemove",{}).buttons!==undefined||false}catch(err){}}this.Visible=Fit.Core.CreateOverride(this.Visible,function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)&&designEditorDetached!==null){designEditorDetached.SetVisible(val)}return base(val)});this.Enabled=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==me.Enabled()){me._internal.Data("enabled",val===true?"true":"false");if(val===false){me.Focused(false)}input.disabled=val===false;if(designModeEnabledAndReady()===true){designEditor.setReadOnly(input.disabled);Fit.Dom.Attribute(designEditorDom.Editable,"tabindex",input.disabled===true?null:"0");Fit.Dom.Attribute(me.GetDomElement(),"tabindex",input.disabled!==true&&me.DesignMode()===true?"-1":null)}if(designEditorDetached!==null){designEditorDetached.SetEnabled(val)}me._internal.UpdateInternalState();me._internal.Repaint()}return me._internal.Data("enabled")==="true"};this.Focused=function(focus){Fit.Validation.ExpectBoolean(focus,true);if(designEditorDetached!==null&&designEditorDetached.IsActive===true){if(focus===true){designEditorDetached.Focus()}else if(focus===false){Fit.Browser.Debug("WARNING: Unable to remove focus from Input control '"+me.GetId()+"' when modal detached editor is open")}return me.Visible()}var elm=input;if(me.DesignMode()===true){if(designModeEnabledAndReady()===true){elm=designEditor}else{elm=me.GetDomElement()}}if(Fit.Validation.IsSet(focus)===true){if(focus===true){if(Fit._internal.Controls.Input.ActiveEditorForDialog===me){delete Fit._internal.Controls.Input.ActiveDialogForEditorCanceled}elm.focus()}else{if(designModeEnabledAndReady()===true){if(Fit._internal.Controls.Input.ActiveEditorForDialog===me){if(Fit._internal.Controls.Input.ActiveDialogForEditor!==null){Fit._internal.Controls.Input.ActiveDialogForEditor.hide();Fit.Dom.GetFocused().blur();me._internal.FireOnBlur()}else{Fit._internal.Controls.Input.ActiveDialogForEditorCanceled=true;Fit.Dom.GetFocused().blur()}}else{if(designEditorActiveToolbarPanel!==null){designEditorActiveToolbarPanel.CloseEmojiPanel()}if(Fit.Dom.Contained(me.GetDomElement(),Fit.Dom.GetFocused())===true){Fit.Dom.GetFocused().blur()}}}else{elm.blur()}}}if(me===null){return false}if(me.DesignMode()===true){if(Fit._internal.Controls.Input.ActiveEditorForDialog===me&&(Fit._internal.Controls.Input.ActiveDialogForEditor===null||Fit.Dom.Contained(Fit._internal.Controls.Input.ActiveDialogForEditor.getElement().$,Fit.Dom.GetFocused())===true||Fit.Dom.GetFocused()===document.body))return true;if(designEditorActiveToolbarPanel!==null&&Fit.Dom.Contained(designEditorActiveToolbarPanel.DomElement,Fit.Dom.GetFocused())===true)return true;return Fit.Dom.GetFocused()===me.GetDomElement()||Fit.Dom.Contained(me.GetDomElement(),Fit.Dom.GetFocused())}return Fit.Dom.GetFocused()===elm};this.Value=function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){val=me.Type()==="Color"?val.toUpperCase():val;var fireOnChange=me.Value()!==val;orgVal=preserveDirtyState!==true?val:orgVal;preVal=val;designEditorDirty=designEditorDirtyPending===true?true:false;designEditorDirtyPending=false;if(designModeEnabledAndReady()===true){me._internal.ExecuteWithNoOnChange(function(){designEditorCleanEditableDom=true;CKEDITOR.instances[me.GetId()+"_DesignMode"].setData(val);designEditorCleanEditableDom=false});updateDesignEditorPlaceholder();updateDesignEditorSize()}else{input.value=val}if(designEditorConfig!==null&&designEditorConfig.Plugins&&designEditorConfig.Plugins.Images&&designEditorConfig.Plugins.Images.RevokeUnreferencedBlobUrlsOnValueSet===true){var blobUrlsReferenced=Fit.String.ParseImageBlobUrls(val);var newImageBlobUrls=[];Fit.Array.ForEach(imageBlobUrls,function(blobUrl){if(Fit.Array.Contains(blobUrlsReferenced,blobUrl)===true){newImageBlobUrls.push(blobUrl)}else{URL.revokeObjectURL(blobUrl)}});imageBlobUrls=newImageBlobUrls}if(designEditorConfig!==null&&designEditorConfig.Plugins&&designEditorConfig.Plugins.Images&&designEditorConfig.Plugins.Images.RevokeExternalBlobUrlsOnDispose===true){var blobUrls=Fit.String.ParseImageBlobUrls(val);Fit.Array.ForEach(blobUrls,function(blobUrl){if(Fit.Array.Contains(imageBlobUrls,blobUrl)===false){Fit.Array.Add(imageBlobUrls,blobUrl)}})}if(fireOnChange===true)me._internal.FireOnChange()}if(designModeEnabledAndReady()===true){if(designEditorDirty===false){return orgVal}var curVal=CKEDITOR.instances[me.GetId()+"_DesignMode"].getData();curVal=curVal.replace(/<\/p>\n$/,"</p>");curVal=curVal.replace(/(<img.*?) class=""(.*?>)/,"$1$2");return curVal}return me.Type()==="Color"?input.value.toUpperCase():input.value};this.UserValue=Fit.Core.CreateOverride(this.UserValue,function(val){if(Fit.Validation.IsSet(val)===true&&me.DesignMode()===true){designEditorDirtyPending=true}return base(val)});this.IsDirty=function(){if(me.DesignMode()===true){return designEditorDirty}return orgVal!==me.Value()};this.Clear=function(){me.Value("")};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){if(me.DesignMode()===true&&designModeEnabledAndReady()===false){designEditorMustDisposeWhenReady=true;Fit.Browser.Debug("WARNING: Attempting to dispose Input control '"+me.GetId()+"' while initializing DesignMode! Control will be disposed later.");me.Render(document.body);me.GetDomElement().style.position="fixed";me.GetDomElement().style.left="0px";me.GetDomElement().style.bottom="-100px";me.GetDomElement().style.maxHeight="100px";return}var curVal=designEditorConfig!==null&&designEditorConfig.Plugins&&designEditorConfig.Plugins.Images&&designEditorConfig.Plugins.Images.RevokeBlobUrlsOnDispose==="UnreferencedOnly"?me.Value():null;if(Fit._internal.Controls.Input.ActiveEditorForDialog===me){if(Fit._internal.Controls.Input.ActiveDialogForEditor===null){Fit._internal.Controls.Input.ActiveEditorForDialogDestroyed=designEditor;Fit.Dom.Remove(me.GetDomElement());return}else{Fit._internal.Controls.Input.ActiveDialogForEditor.hide()}}if(designEditor!==null){destroyDesignEditorInstance()}if(changeObserverId!==-1){clearInterval(changeObserverId)}Fit.Internationalization.RemoveOnLocaleChanged(localize);if(debouncedOnChange!==null){debouncedOnChange.Cancel()}if(designEditorConfig===null||!designEditorConfig.Plugins||!designEditorConfig.Plugins.Images||!designEditorConfig.Plugins.Images.RevokeBlobUrlsOnDispose||designEditorConfig.Plugins.Images.RevokeBlobUrlsOnDispose==="All"){Fit.Array.ForEach(imageBlobUrls,function(imageUrl){URL.revokeObjectURL(imageUrl)})}else{Fit.Array.ForEach(imageBlobUrls,function(imageUrl){if(curVal.match(new RegExp("img.*src=([\"'])"+imageUrl+"\\1","i"))===null){URL.revokeObjectURL(imageUrl)}})}me=orgVal=preVal=input=changeObserverId=cmdResize=designEditor=designEditorDom=designEditorDirty=designEditorDirtyPending=designEditorConfig=designEditorReloadConfig=designEditorRestoreButtonState=designEditorSuppressPaste=designEditorSuppressOnResize=designEditorMustReloadWhenReady=designEditorMustDisposeWhenReady=designEditorUpdateSizeDebouncer=designEditorHeightMonitorId=designEditorActiveToolbarPanel=designEditorDetached=designEditorClearPlaceholder=designEditorCleanEditableDom=designEditorGlobalKeyDownEventId=designEditorGlobalKeyUpEventId=wasAutoChangedToMultiLineMode=minimizeHeight=maximizeHeight=minMaxUnit=maximizeHeightConfigured=resizable=nativeResizableAvailable=mutationObserverId=rootedEventId=createWhenReadyIntervalId=isIe8=debounceOnChangeTimeout=debouncedOnChange=imageBlobUrls=locale=null;base()});this.Width=Fit.Core.CreateOverride(this.Width,function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){me._internal.Data("resized","false");base(val,unit);updateDesignEditorSize()}return base()});this.Height=Fit.Core.CreateOverride(this.Height,function(val,unit,suppressMinMax){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);Fit.Validation.ExpectBoolean(suppressMinMax,true);if(Fit.Validation.IsSet(val)===true){if(me.Maximizable()===true&&suppressMinMax!==true){me.Maximized(false)}me._internal.Data("resized","false");me._internal.Data("autogrow",me.DesignMode()===true?"false":null);var autoGrowEnabled=false;if(val===-1&&designModeEnabledAndReady()===true){me._internal.Data("autogrow","true");autoGrowEnabled=true}enableDesignEditorHeightMonitor(val!==-1&&unit==="%"&&designModeEnabledAndReady()===true);var hideToolbarAgain=false;if(isToolbarHiddenInDesignEditor()===true){restoreHiddenToolbarInDesignEditor();hideToolbarAgain=true}var h=base(val,unit);updateDesignEditorSize();if(hideToolbarAgain===true){hideToolbarInDesignMode()}if(me.Maximizable()===true&&suppressMinMax!==true){minimizeHeight=h.Value;maximizeHeight=maximizeHeightConfigured!==-1?maximizeHeightConfigured:minimizeHeight!==-1?minimizeHeight*2:300;minMaxUnit=h.Unit}if(autoGrowEnabled===true){repaint()}}return base()});this.Placeholder=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){input.placeholder=val;updateDesignEditorPlaceholder()}return input.placeholder?input.placeholder:""};this.CheckSpelling=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val!==input.spellcheck){input.spellcheck=val;if(me.DesignMode()===true){reloadEditor()}}}return input.spellcheck};this.Type=function(val){Fit.Validation.ExpectStringValue(val,true);if(Fit.Validation.IsSet(val)===true){if(Fit.Validation.IsSet(Fit.Controls.InputType[val])===false||val===Fit.Controls.InputType.Unknown)Fit.Validation.ThrowError("Unsupported input type specified - use e.g. Fit.Controls.InputType.Text");if(val===Fit.Controls.InputType.Textarea){me.MultiLine(true)}else{me.MultiLine(false);if(val===Fit.Controls.InputType.Color)input.type="color";else if(val===Fit.Controls.InputType.Date)input.type="date";else if(val===Fit.Controls.InputType.DateTime)input.type="datetime";else if(val===Fit.Controls.InputType.Email)input.type="email";else if(val===Fit.Controls.InputType.Month)input.type="month";else if(val===Fit.Controls.InputType.Number)input.type="number";else if(val===Fit.Controls.InputType.Password)input.type="password";else if(val===Fit.Controls.InputType.PhoneNumber)input.type="tel";else if(val===Fit.Controls.InputType.Text)input.type="text";else if(val===Fit.Controls.InputType.Time)input.type="time";else if(val===Fit.Controls.InputType.Week)input.type="week"}}if(me.MultiLine()===true||me.DesignMode()===true)return Fit.Controls.InputType.Textarea;else if(input.type==="color")return Fit.Controls.InputType.Color;else if(input.type==="date")return Fit.Controls.InputType.Date;else if(input.type==="datetime")return Fit.Controls.InputType.DateTime;else if(input.type==="email")return Fit.Controls.InputType.Email;else if(input.type==="month")return Fit.Controls.InputType.Month;else if(input.type==="number")return Fit.Controls.InputType.Number;else if(input.type==="password")return Fit.Controls.InputType.Password;else if(input.type==="tel")return Fit.Controls.InputType.PhoneNumber;else if(input.type==="text")return Fit.Controls.InputType.Text;else if(input.type==="time")return Fit.Controls.InputType.Time;else if(input.type==="week")return Fit.Controls.InputType.Week;return Fit.Controls.InputType.Unknown};this.MultiLine=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(me.DesignMode()===true&&designModeEnabledAndReady()===false){console.error("MultiLine(boolean) is not allowed for Input control '"+me.GetId()+"' while DesignMode editor is initializing!");return false}if(me.DesignMode()===true)me.DesignMode(false);if(val===true&&wasAutoChangedToMultiLineMode===true){wasAutoChangedToMultiLineMode=false}if(val===true&&input.tagName==="INPUT"){var focused=me.Focused();var oldInput=input;me._internal.RemoveDomElement(oldInput);input=document.createElement("textarea");input.value=oldInput.value;input.spellcheck=oldInput.spellcheck;input.placeholder=oldInput.placeholder;input.disabled=oldInput.disabled;input.onkeyup=oldInput.onkeyup;input.onchange=oldInput.onchange;me._internal.AddDomElement(input);if(nativeResizableAvailable===true){Fit.Events.AddHandler(input,"mousemove",function(e){var ev=Fit.Events.GetEvent(e);if(ev.buttons!==1){return}if(me.Resizable()!==Fit.Controls.InputResizing.Disabled&&(input.style.width!==""||input.style.height!=="")){me._internal.Data("resized","true")}})}if(focused===true)input.focus();me._internal.Data("multiline","true");repaint()}else if(val===false&&input.tagName==="TEXTAREA"){var focused=me.Focused();var oldInput=input;me._internal.RemoveDomElement(oldInput);if(cmdResize!==null){me._internal.RemoveDomElement(cmdResize);cmdResize=null;me._internal.Data("maximized","false");me._internal.Data("maximizable","false");repaint()}else if(resizable!==Fit.Controls.InputResizing.Disabled){resizable=Fit.Controls.InputResizing.Disabled;me._internal.Data("resizable",resizable.toLowerCase());me._internal.Data("resized","false")}input=document.createElement("input");input.autocomplete="off";input.type="text";input.value=oldInput.value;input.spellcheck=oldInput.spellcheck;input.placeholder=oldInput.placeholder;input.disabled=oldInput.disabled;input.onkeyup=oldInput.onkeyup;input.onchange=oldInput.onchange;me._internal.AddDomElement(input);me.Height(-1);if(focused===true)input.focus();wasAutoChangedToMultiLineMode=false;me._internal.Data("multiline","false");repaint()}}return input.tagName==="TEXTAREA"&&me.DesignMode()===false};this.Resizable=function(val){Fit.Validation.ExpectStringValue(val,true);if(val===Fit.Controls.InputResizing.Enabled||val===Fit.Controls.InputResizing.Disabled||val===Fit.Controls.InputResizing.Horizontal||val===Fit.Controls.InputResizing.Vertical){if(val!==resizable){if(val!==Fit.Controls.InputResizing.Disabled){if(me.Maximizable()===true){me.Maximizable(false)}if(me.MultiLine()===false&&me.DesignMode()===false){me.MultiLine(true);wasAutoChangedToMultiLineMode=true}}else{var w=me.Width();me.Width(w.Value,w.Unit);var h=me.Height();me.Height(h.Value,h.Unit)}resizable=val;me._internal.Data("resizable",val.toLowerCase());if(val===Fit.Controls.InputResizing.Disabled){me._internal.Data("resized","false");input.style.width="";input.style.height="";input.style.margin=""}revertToSingleLineIfNecessary();if(me.DesignMode()===true){reloadEditor()}}}return resizable};this.Maximizable=function(val,heightMax){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectNumber(heightMax,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&cmdResize===null){if(me.Resizable()!==Fit.Controls.InputResizing.Disabled){me.Resizable(Fit.Controls.InputResizing.Disabled)}if(me.MultiLine()===false&&me.DesignMode()===false){me.MultiLine(true);wasAutoChangedToMultiLineMode=true}var h=me.Height();minimizeHeight=h.Value;maximizeHeight=Fit.Validation.IsSet(heightMax)===true?heightMax:minimizeHeight!==-1?minimizeHeight*2:300;minMaxUnit=h.Unit;maximizeHeightConfigured=heightMax||-1;cmdResize=document.createElement("span");cmdResize.tabIndex=-1;cmdResize.onclick=function(){me.Maximized(!me.Maximized());me.Focused(true)};Fit.Dom.AddClass(cmdResize,"fa");Fit.Dom.AddClass(cmdResize,"fa-chevron-down");me._internal.AddDomElement(cmdResize);me._internal.Data("maximizable","true");repaint()}else if(val===false&&cmdResize!==null){me._internal.RemoveDomElement(cmdResize);cmdResize=null;me.Height(minimizeHeight,minMaxUnit);minimizeHeight=-1;maximizeHeight=-1;minMaxUnit=null;me._internal.Data("maximizable","false");revertToSingleLineIfNecessary();repaint()}else if(val===true&&cmdResize!==null&&Fit.Validation.IsSet(heightMax)===true){maximizeHeight=heightMax!==-1?heightMax:minimizeHeight*2;maximizeHeightConfigured=heightMax}}return cmdResize!==null};this.Maximized=function(val){Fit.Validation.ExpectBoolean(val,true);var autoGrowEnabled=me.Height().Value===-1&&me.DesignMode()===true;if(Fit.Validation.IsSet(val)===true&&me.Maximizable()===true&&autoGrowEnabled===false){if(val===true&&Fit.Dom.HasClass(cmdResize,"fa-chevron-up")===false){me.Height(maximizeHeight,minMaxUnit,true);Fit.Dom.RemoveClass(cmdResize,"fa-chevron-down");Fit.Dom.AddClass(cmdResize,"fa-chevron-up");me._internal.Data("maximized","true");repaint()}else if(val===false&&Fit.Dom.HasClass(cmdResize,"fa-chevron-down")===false){me.Height(minimizeHeight,minMaxUnit,true);Fit.Dom.RemoveClass(cmdResize,"fa-chevron-up");Fit.Dom.AddClass(cmdResize,"fa-chevron-down");me._internal.Data("maximized","false");repaint()}}return cmdResize!==null&&Fit.Dom.HasClass(cmdResize,"fa-chevron-up")===true};this.DesignMode=function(val,editorConfig){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectObject(editorConfig,true);Fit.Validation.ExpectObject((editorConfig||{}).Plugins,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Plugins||{}).Emojis,true);Fit.Validation.ExpectObject(((editorConfig||{}).Plugins||{}).Images,true);Fit.Validation.ExpectBoolean((((editorConfig||{}).Plugins||{}).Images||{}).Enabled,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Plugins||{}).Images||{}).EmbedType,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Plugins||{}).Images||{}).RevokeBlobUrlsOnDispose,true);Fit.Validation.ExpectBoolean((((editorConfig||{}).Plugins||{}).Images||{}).RevokeExternalBlobUrlsOnDispose,true);Fit.Validation.ExpectObject((editorConfig||{}).Toolbar,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Formatting,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Justify,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Lists,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Links,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Emojis,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Images,true);Fit.Validation.ExpectStringValue(((editorConfig||{}).Toolbar||{}).Position,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Sticky,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).HideWhenInactive,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Toolbar||{}).Detach,true);Fit.Validation.ExpectObject((editorConfig||{}).InfoPanel,true);Fit.Validation.ExpectString(((editorConfig||{}).InfoPanel||{}).Text,true);Fit.Validation.ExpectString(((editorConfig||{}).InfoPanel||{}).Alignment,true);Fit.Validation.ExpectObject((editorConfig||{}).Tags,true);Fit.Validation.ExpectObject((editorConfig||{}).AutoGrow,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).AutoGrow||{}).Enabled,true);Fit.Validation.ExpectObject(((editorConfig||{}).AutoGrow||{}).MinimumHeight,true);Fit.Validation.ExpectNumber((((editorConfig||{}).AutoGrow||{}).MinimumHeight||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).AutoGrow||{}).MinimumHeight||{}).Unit,true);Fit.Validation.ExpectObject(((editorConfig||{}).AutoGrow||{}).MaximumHeight,true);Fit.Validation.ExpectNumber((((editorConfig||{}).AutoGrow||{}).MaximumHeight||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).AutoGrow||{}).MaximumHeight||{}).Unit,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).AutoGrow||{}).PreventResizeBeyondMaximumHeight,true);Fit.Validation.ExpectObject((editorConfig||{}).Detachable,true);Fit.Validation.ExpectString(((editorConfig||{}).Detachable||{}).Title,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Detachable||{}).Maximizable,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Detachable||{}).Maximized,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Detachable||{}).Draggable,true);Fit.Validation.ExpectBoolean(((editorConfig||{}).Detachable||{}).Resizable,true);Fit.Validation.ExpectObject(((editorConfig||{}).Detachable||{}).Width,true);Fit.Validation.ExpectNumber((((editorConfig||{}).Detachable||{}).Width||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Detachable||{}).Width||{}).Unit,true);Fit.Validation.ExpectObject(((editorConfig||{}).Detachable||{}).MinimumWidth,true);Fit.Validation.ExpectNumber((((editorConfig||{}).Detachable||{}).MinimumWidth||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Detachable||{}).MinimumWidth||{}).Unit,true);Fit.Validation.ExpectObject(((editorConfig||{}).Detachable||{}).MaximumWidth,true);Fit.Validation.ExpectNumber((((editorConfig||{}).Detachable||{}).MaximumWidth||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Detachable||{}).MaximumWidth||{}).Unit,true);Fit.Validation.ExpectObject(((editorConfig||{}).Detachable||{}).Height,true);Fit.Validation.ExpectNumber((((editorConfig||{}).Detachable||{}).Height||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Detachable||{}).Height||{}).Unit,true);Fit.Validation.ExpectObject(((editorConfig||{}).Detachable||{}).MinimumHeight,true);Fit.Validation.ExpectNumber((((editorConfig||{}).Detachable||{}).MinimumHeight||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Detachable||{}).MinimumHeight||{}).Unit,true);Fit.Validation.ExpectObject(((editorConfig||{}).Detachable||{}).MaximumHeight,true);Fit.Validation.ExpectNumber((((editorConfig||{}).Detachable||{}).MaximumHeight||{}).Value,true);Fit.Validation.ExpectStringValue((((editorConfig||{}).Detachable||{}).MaximumHeight||{}).Unit,true);if(editorConfig&&editorConfig.Tags){Fit.Validation.ExpectTypeArray(editorConfig.Tags.Triggers,function(trigger){Fit.Validation.ExpectStringValue(trigger.Marker);Fit.Validation.ExpectInteger(trigger.MinimumCharacters,true);Fit.Validation.ExpectInteger(trigger.DebounceQuery,true);Fit.Validation.ExpectInstance(trigger.Pattern,RegExp,true)});Fit.Validation.ExpectStringValue(editorConfig.Tags.QueryUrl);Fit.Validation.ExpectStringValue(editorConfig.Tags.JsonpCallback,true);Fit.Validation.ExpectInteger(editorConfig.Tags.JsonpTimeout,true);Fit.Validation.ExpectFunction(editorConfig.Tags.OnRequest,true);Fit.Validation.ExpectFunction(editorConfig.Tags.OnResponse,true);Fit.Validation.ExpectFunction(editorConfig.Tags.TagCreator,true)}if(Fit.Validation.IsSet(val)===true){var designMode=me._internal.Data("designmode")==="true";if(Fit._internal.Controls.Input.ActiveEditorForDialog===me&&Fit._internal.Controls.Input.ActiveEditorForDialogDisabledPostponed===true)designMode=false;if(val===true&&designMode===false||val===true&&Fit.Validation.IsSet(editorConfig)===true&&Fit.Core.IsEqual(editorConfig,designEditorConfig)===false){var configUpdated=designMode===true;if(Fit._internal.Controls.Input.ActiveEditorForDialog===me){delete Fit._internal.Controls.Input.ActiveEditorForDialogDisabledPostponed;if(configUpdated===false){return true}}if(configUpdated===true){reloadEditor(false,Fit.Core.Clone(editorConfig));return true}if(Fit.Validation.IsSet(editorConfig)===true){designEditorConfig=Fit.Core.Clone(editorConfig)}if(designEditorConfig!==null&&designEditorConfig.Plugins&&designEditorConfig.Plugins.Images&&designEditorConfig.Plugins.Images.RevokeExternalBlobUrlsOnDispose===true){var blobUrls=Fit.String.ParseImageBlobUrls(me.Value());Fit.Array.ForEach(blobUrls,function(blobUrl){if(Fit.Array.Contains(imageBlobUrls,blobUrl)===false){Fit.Array.Add(imageBlobUrls,blobUrl)}})}if(me.MultiLine()===false){me.MultiLine(true);wasAutoChangedToMultiLineMode=true}me._internal.Data("designmode","true");me._internal.Data("toolbar",designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.HideWhenInactive===true?"false":"true");me._internal.Data("toolbar-position",designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.Position==="Bottom"?"bottom":"top");me._internal.Data("toolbar-sticky",designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.Sticky===true?"true":"false");me.GetDomElement().tabIndex=-1;if(me.Focused()===true){me.GetDomElement().focus()}input.id=me.GetId()+"_DesignMode";if(window.CKEDITOR===undefined){window.CKEDITOR=null;Fit.Loader.LoadScript(Fit.GetUrl()+"/Resources/CKEditor/ckeditor.js?cacheKey="+Fit.GetVersion().Version,function(src){CKEDITOR.disableAutoInline=true;if(Fit.Validation.IsSet(Fit._internal.Controls.Input.Editor.Skin)===true){CKEDITOR.config.skin=Fit._internal.Controls.Input.Editor.Skin}CKEDITOR.on("instanceReady",function(ev){ev.editor.dataProcessor.writer.selfClosingEnd=">"});CKEDITOR.on("dialogDefinition",function(e){var dialogName=e.data.name;var dialogDef=e.data.definition;if(dialogName==="table"){dialogDef.getContents("info").get("txtWidth").default=""}var dialog=dialogDef.dialog;dialog.on("show",function(ev){if(Fit._internal.Controls.Input.ActiveDialogForEditorCanceled){if(Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()<9){setTimeout(function(){ev.sender.hide()},100)}else{ev.sender.hide()}return}if(Fit._internal.Controls.Input.ActiveEditorForDialog===undefined)return;Fit.Dom.Data(ev.sender.getElement().$,"skin",CKEDITOR.config.skin);Fit._internal.Controls.Input.ActiveDialogForEditor=ev.sender;if(Fit._internal.Controls.Input.ActiveEditorForDialogDestroyed){setTimeout(function(){Fit._internal.Controls.Input.ActiveEditorForDialog.Dispose()},0);return}if(Fit._internal.Controls.Input.ActiveEditorForDialogDisabledPostponed){setTimeout(function(){delete Fit._internal.Controls.Input.ActiveEditorForDialogDisabledPostponed;Fit._internal.Controls.Input.ActiveEditorForDialog.DesignMode(false)},0);return}var ckeDialogElement=this.getElement().$;Fit.Dom.Data(ckeDialogElement,"disable-light-dismiss","true");var bgModalLayer=document.querySelector("div.cke_dialog_background_cover");if(bgModalLayer!==null){Fit.Dom.Data(bgModalLayer,"disable-light-dismiss","true")}if(Fit._internal.ControlBase.ReduceDocumentRootPollution===true){var ckeDialogElement=this.getElement().$;Fit.Dom.InsertAfter(Fit._internal.Controls.Input.ActiveEditorForDialog.GetDomElement(),ckeDialogElement);ckeDialogElement.style.display=!CKEDITOR.env.ie||CKEDITOR.env.edge?"flex":"";this.layout();var bgModalLayer=document.querySelector("div.cke_dialog_background_cover");if(bgModalLayer!==null){Fit.Dom.InsertAfter(Fit._internal.Controls.Input.ActiveEditorForDialog.GetDomElement(),bgModalLayer)}if(ev.sender.definition.title==="Image"){var imageResizeHandlersContainer=document.querySelector("#ckimgrsz");if(imageResizeHandlersContainer!==null){imageResizeHandlersContainer.style.display="none"}}}});dialog.on("hide",function(ev){var inputControl=Fit._internal.Controls.Input.ActiveEditorForDialog;var showCanceledDueToBlur=Fit._internal.Controls.Input.ActiveDialogForEditorCanceled===true;delete Fit._internal.Controls.Input.ActiveEditorForDialog;delete Fit._internal.Controls.Input.ActiveEditorForDialogDestroyed;delete Fit._internal.Controls.Input.ActiveEditorForDialogDisabledPostponed;delete Fit._internal.Controls.Input.ActiveDialogForEditor;delete Fit._internal.Controls.Input.ActiveDialogForEditorCanceled;if(Fit._internal.ControlBase.ReduceDocumentRootPollution===true){var bgModalLayer=document.querySelector("div.cke_dialog_background_cover");if(bgModalLayer!==null){Fit.Dom.Add(document.body,bgModalLayer)}if(ev.sender.definition.title==="Image"){var imageResizeHandlersContainer=document.querySelector("#ckimgrsz");if(imageResizeHandlersContainer!==null){imageResizeHandlersContainer.style.display=""}}}setTimeout(function(){if(inputControl.GetDomElement()===null)return;inputControl._internal.FocusStateLocked(false);if(showCanceledDueToBlur===true){Fit.Dom.GetFocused().blur()}},0)})});if(me===null)return;if(me.DesignMode()===false)return;createEditor()})}else if(window.CKEDITOR===null){if(createWhenReadyIntervalId===-1){createWhenReadyIntervalId=setInterval(function(){if(window.CKEDITOR!==null){clearInterval(createWhenReadyIntervalId);createWhenReadyIntervalId=-1;if(me.DesignMode()===true&&designEditor===null){createEditor()}}},500)}}else{createEditor()}if(me.Resizable()!==Fit.Controls.InputResizing.Disabled){Fit.Dom.Data(me.GetDomElement(),"resized","false");input.style.width="";input.style.height="";input.style.margin=""}var enableAutoGrow=me.Height().Value===-1||designEditorConfig!==null&&designEditorConfig.AutoGrow&&designEditorConfig.AutoGrow.Enabled===true;if(enableAutoGrow===true&&me.Maximizable()===true){me.Maximized(false)}repaint()}else if(val===false&&designMode===true){if(designModeEnabledAndReady()===false){console.error("DesignMode(false) is not allowed for Input control '"+me.GetId()+"' while DesignMode editor is initializing!");return true}var focused=me.Focused();if(focused===true){me.GetDomElement().focus()}if(Fit._internal.Controls.Input.ActiveEditorForDialog===me){if(Fit._internal.Controls.Input.ActiveDialogForEditor!==null){Fit._internal.Controls.Input.ActiveDialogForEditor.hide()}else{Fit._internal.Controls.Input.ActiveEditorForDialogDisabledPostponed=true;return true}}if(designEditorActiveToolbarPanel!==null){designEditorActiveToolbarPanel.CloseEmojiPanel()}destroyDesignEditorInstance();me._internal.Data("designmode","false");Fit.Dom.Data(me.GetDomElement(),"resized","false");me._internal.Data("autogrow",null);me._internal.Data("toolbar",null);me._internal.Data("toolbar-position",null);me._internal.Data("toolbar-sticky",null);revertToSingleLineIfNecessary();if(focused===true){if(isIe8===false){input.focus()}else{me.GetDomElement().blur()}}Fit.Dom.Attribute(me.GetDomElement(),"tabindex",null);repaint()}}return me._internal.Data("designmode")==="true"};this.DebounceOnChange=function(timeout){Fit.Validation.ExpectInteger(timeout,true);if(Fit.Validation.IsSet(timeout)===true&&timeout!==debounceOnChangeTimeout){debounceOnChangeTimeout=timeout;if(debouncedOnChange!==null){debouncedOnChange.Flush();debouncedOnChange=null}}return debounceOnChangeTimeout};this._internal=this._internal?this._internal:{};this._internal.DesignModeEnabledAndReady=function(){return designModeEnabledAndReady()};function createEditor(){if(Fit.Dom.IsRooted(me.GetDomElement())===false){var retry=function(){if(Fit.Dom.IsRooted(me.GetDomElement())===true){if(me.DesignMode()===true){createEditor()}return true}return me.DesignMode()===true?false:true};setTimeout(function(){if(me===null){return}if(retry()===false){rootedEventId=Fit.Events.AddHandler(me.GetDomElement(),"#rooted",function(e){if(retry()===true||me.DesignMode()===false){Fit.Events.RemoveHandler(me.GetDomElement(),rootedEventId);rootedEventId=-1}})}},0);return}var langSupport=["da","de","en","no"];var localeCode=Fit.Internationalization.Locale().length===2?Fit.Internationalization.Locale():Fit.Internationalization.Locale().substring(0,2);var lang=Fit.Array.Contains(langSupport,localeCode)===true?localeCode:"en";var plugins=[];var toolbar=[];var mentions=[];var config=designEditorConfig||{};if(config.Plugins&&config.Plugins.Emojis===true||config.Toolbar&&config.Toolbar.Emojis===true){Fit.Array.Add(plugins,"emoji")}if(designModeEnableImagePlugin()===true){if(config.Toolbar&&config.Toolbar.Images===true){Fit.Array.Add(plugins,"base64image")}plugins=Fit.Array.Merge(plugins,["base64imagepaste","dragresize"])}Fit.Array.Add(plugins,"custombuttons");if(!config.Toolbar||config.Toolbar.Formatting!==false){Fit.Array.Add(toolbar,{name:"BasicFormatting",items:["Bold","Italic","Underline"]})}if(!config.Toolbar||config.Toolbar.Justify!==false){Fit.Array.Add(toolbar,{name:"Justify",items:["JustifyLeft","JustifyCenter","JustifyRight"]})}if(!config.Toolbar||config.Toolbar.Lists!==false){Fit.Array.Add(toolbar,{name:"Lists",items:["NumberedList","BulletedList","Indent","Outdent"]})}if(!config.Toolbar||config.Toolbar.Links!==false){Fit.Array.Add(toolbar,{name:"Links",items:["Link","Unlink"]})}if(config.Toolbar){var insert=[];if(config.Toolbar.Emojis===true){Fit.Array.Add(insert,"EmojiPanel")}if(config.Toolbar.Images===true){Fit.Array.Add(insert,"base64image")}if(config.Toolbar.Tables===true){Fit.Array.Add(insert,"Table")}if(insert.length>0){Fit.Array.Add(toolbar,{name:"Insert",items:insert})}var customButtons=[];var customToolbarGroups=[];if(config.Toolbar.Detach===true){Fit.Array.Add(customButtons,{Label:locale.Detach,Command:"Detach",Icon:Fit.GetUrl()+"/Controls/Input/"+(window.devicePixelRatio===2?"maximize-highres.png":"maximize.png"),Callback:function(args){openDetachedDesignEditor()}});Fit.Array.Add(customToolbarGroups,{name:"DetachableEditor",items:["Detach"]})}toolbar=Fit.Array.Merge(toolbar,customToolbarGroups)}if(config.Tags){var requestAwaiting=null;var createEventArgs=function(marker,query,request){return{Sender:me,Query:{Marker:marker,Query:query},Request:request}};Fit.Array.ForEach(config.Tags.Triggers,function(trigger){var mention={marker:trigger.Marker,minChars:trigger.MinimumCharacters||0,pattern:trigger.Pattern,throttle:0,feed:function(args,resolve){var req=null;if(config.Tags.JsonpCallback){req=new Fit.Http.JsonpRequest(config.Tags.QueryUrl,config.Tags.JsonpCallback);config.Tags.JsonpTimeout&&req.Timeout(config.Tags.JsonpTimeout);req.SetParameter("Marker",args.marker);req.SetParameter("Query",args.query)}else{req=new Fit.Http.JsonRequest(config.Tags.QueryUrl);req.SetData({Marker:args.marker,Query:args.query})}if(config.Tags.OnRequest){var eventArgs=createEventArgs(args.marker,args.query,req);if(config.Tags.OnRequest(me,eventArgs)===false){resolve([]);return}if(eventArgs.Request!==req){Fit.Validation.ExpectInstance(eventArgs.Request,Fit.Http.Request);req=eventArgs.Request}}var processDataAndResolve=function(items){if(config.Tags.OnResponse){var eventArgs=Fit.Core.Merge(createEventArgs(args.marker,args.query,req),{Tags:items});config.Tags.OnResponse(me,eventArgs);items=eventArgs.Tags}Fit.Array.ForEach(items,function(item){item.id=item.Value;item.name=item.Title});resolve(items);if(items.length>0){var ctm=document.querySelector("ul.cke_autocomplete_opened");if(ctm!==null){Fit.Dom.Data(ctm,"disable-light-dismiss","true");if(Fit._internal.ControlBase.ReduceDocumentRootPollution===true){ctm.style.position="fixed";Fit.Dom.InsertAfter(me.GetDomElement(),ctm)}}}};if(Fit.Core.InstanceOf(req,Fit.Http.JsonpRequest)===true){req.OnSuccess(function(sender){var response=req.GetResponse();var items=response instanceof Array?response:[];processDataAndResolve(items)});req.OnTimeout(function(sender){resolve([]);Fit.Validation.ThrowError("Unable to get tags - request did not return data in time (JSONP timeout reached)")})}else{req.OnSuccess(function(sender){var response=req.GetResponseJson();var items=response instanceof Array?response:[];processDataAndResolve(items)});req.OnFailure(function(sender){resolve([]);Fit.Validation.ThrowError("Unable to get tags - request failed with HTTP Status code "+req.GetHttpStatus())})}if(requestAwaiting!==null){requestAwaiting.Abort()}requestAwaiting=req;req.Start()},itemTemplate:function(item){if(item.Icon){var imageWidth="24px";var spacingWidth="5px";var spanWidthCss=isIe8===true?"width: 165px":"width: calc(100% - "+imageWidth+" - "+spacingWidth+")";return'<li data-id="'+item.Value+'"><img src="'+item.Icon+'" style="width: '+imageWidth+"; height: "+imageWidth+"; border-radius: "+imageWidth+'; vertical-align: middle" alt=""><span style="display: inline-block; box-sizing: border-box; '+spanWidthCss+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; margin-left: "+spacingWidth+'">'+item.Title+"</span></li>"}else{return'<li data-id="'+item.Value+'"><span style="display: inline-block; box-sizing: border-box; width: 100%">'+item.Title+"</span></li>"}},outputTemplate:function(item){var alternativeItem=null;if(config.Tags.TagCreator){var callbackArgs={Sender:me,QueryMarker:trigger.Marker,Tag:Fit.Core.Clone(item)};alternativeItem=config.Tags.TagCreator(me,callbackArgs)||null}if(alternativeItem!==null){return'<a data-tag-type="'+(alternativeItem.Type||trigger.Marker)+'" data-tag-id="'+(alternativeItem.Value||item.Value)+'"'+(alternativeItem.Data||item.Data?' data-tag-data="'+(alternativeItem.Data||item.Data)+'"':"")+(alternativeItem.Context||item.Context?' data-tag-context="'+(alternativeItem.Context||item.Context)+'"':"")+(alternativeItem.Url||item.Url?' href="'+(alternativeItem.Url||item.Url)+'"':'href=""')+">"+(alternativeItem.Title||trigger.Marker+item.Title)+"</a>&nbsp;"}else{return'<a data-tag-type="'+trigger.Marker+'" data-tag-id="'+item.Value+'"'+(item.Data?' data-tag-data="'+item.Data+'"':"")+(item.Context?' data-tag-context="'+item.Context+'"':"")+(item.Url?' href="'+item.Url+'"':'href=""')+">"+trigger.Marker+item.Title+"</a>&nbsp;"}}};if(trigger.DebounceQuery!==0){mention.feed=Fit.Core.CreateDebouncer(mention.feed,trigger.DebounceQuery||300).Invoke}Fit.Array.Add(mentions,mention)})}var onImageAdded=function(args){if(args.type==="blob"){imageBlobUrls.push(args.url)}};var disallowedContent="";designEditor=CKEDITOR.replace(me.GetId()+"_DesignMode",{toolbarLocation:designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.Position==="Bottom"?"bottom":"top",uiColor:Fit._internal.Controls.Input.Editor.Skin==="moono-lisa"||Fit._internal.Controls.Input.Editor.Skin===null?"#FFFFFF":undefined,extraAllowedContent:"a[data-tag-type,data-tag-id,data-tag-data,data-tag-context]",disallowedContent:disallowedContent,language:lang,disableNativeSpellChecker:me.CheckSpelling()===false,readOnly:me.Enabled()===false,tabIndex:me.Enabled()===false?-1:0,title:"",width:"100%",height:me.Height().Value>-1?me.Height().Value+me.Height().Unit:"100%",startupFocus:me.Focused()===true?"end":false,extraPlugins:plugins.join(","),clipboard_handleImages:false,base64image:{storage:designEditorConfig!==null&&designEditorConfig.Plugins&&designEditorConfig.Plugins.Images&&designEditorConfig.Plugins.Images.EmbedType==="blob"?"blob":"base64",onImageAdded:onImageAdded},base64imagepaste:{storage:designEditorConfig!==null&&designEditorConfig.Plugins&&designEditorConfig.Plugins.Images&&designEditorConfig.Plugins.Images.EmbedType==="blob"?"blob":"base64",onImageAdded:onImageAdded},resize_enabled:resizable!==Fit.Controls.InputResizing.Disabled,resize_dir:resizable===Fit.Controls.InputResizing.Enabled?"both":resizable===Fit.Controls.InputResizing.Vertical?"vertical":resizable===Fit.Controls.InputResizing.Horizontal?"horizontal":"none",toolbar:toolbar,removeButtons:"",customButtons:customButtons,mentions:mentions,emoji_minChars:9999,on:{instanceReady:function(){designEditorDom={OuterContainer:designEditor.container.$,InnerContainer:designEditor.container.$.querySelector(".cke_inner"),Top:designEditor.container.$.querySelector(".cke_top"),Content:designEditor.container.$.querySelector(".cke_contents"),Editable:designEditor.container.$.querySelector(".cke_editable"),Bottom:designEditor.container.$.querySelector(".cke_bottom")};if(designEditorDom.InnerContainer===null||designEditorDom.Content===null||designEditorDom.Editable===null||designEditorDom.Top===null&&designEditorDom.Bottom===null){throw"One or more editor DOM elements are missing"}if(designEditorMustDisposeWhenReady===true){Fit.Browser.Debug("WARNING: Input control '"+me.GetId()+"' was disposed while initializing DesignMode - now resuming disposal");me.Dispose();return}if(designEditorMustReloadWhenReady===true){Fit.Browser.Debug("WARNING: Editor for Input control '"+me.GetId()+"' finished loading, but properties affecting editor has changed while initializing - reloading to adjust to changes");reloadEditor(true);return}var mouseOver=false;Fit.Events.AddHandler(designEditorDom.Editable,"mouseover",function(e){mouseOver=true;Fit.Dom.Data(designEditorDom.Editable,"command-button-active",(e.ctrlKey===true||e.metaKey===true||e.shiftKey===true)&&"true"||null)});Fit.Events.AddHandler(designEditorDom.Editable,"mouseout",function(e){mouseOver=false;Fit.Dom.Data(designEditorDom.Editable,"command-button-active",null)});designEditorGlobalKeyDownEventId=Fit.Events.AddHandler(document,"keydown",function(e){mouseOver&&Fit.Dom.Data(designEditorDom.Editable,"command-button-active",(e.ctrlKey===true||e.metaKey===true||e.shiftKey===true)&&"true"||null)});designEditorGlobalKeyUpEventId=Fit.Events.AddHandler(document,"keyup",function(e){mouseOver&&Fit.Dom.Data(designEditorDom.Editable,"command-button-active",null)});Fit.Events.AddHandler(designEditorDom.Editable,"mousedown",function(e){var target=Fit.Events.GetTarget(e);if(target.tagName==="A"&&Fit.Dom.Attribute(target,"href")!==""){if(e.ctrlKey===true||e.metaKey===true){window.open(target.href)}else if(e.shiftKey===true){window.open(target.href,"_blank")}else{var editorInactive=me.Focused()===false&&designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.HideWhenInactive===true;if(me.Enabled()===false||editorInactive===true){var popupCode=Fit.Dom.Data(target,"cke-pa-onclick");if(popupCode!==null){popupCode=popupCode.replace("this.href","'"+target.href+"'");popupCode=popupCode.replace("return false;","");eval(popupCode)}else{window.open(target.href,editorInactive===true?"_blank":Fit.Dom.Attribute(target,"target")||"_self")}}}}});removeCkeSavedSrcAttributesFromDesignEditor();updateDesignEditorPlaceholder();Fit.Dom.Data(designEditorDom.OuterContainer,"skin",CKEDITOR.config.skin);designEditor.setReadOnly(me.Enabled()===false);Fit.Dom.Attribute(designEditorDom.Editable,"tabindex",me.Enabled()===false?null:"0");if(me.Height().Value===-1||designEditorConfig!==null&&designEditorConfig.AutoGrow&&designEditorConfig.AutoGrow.Enabled===true){me.Height(-1);var editableDiv=designEditorDom.Editable;editableDiv.style.minHeight=designEditorConfig!==null&&designEditorConfig.AutoGrow&&designEditorConfig.AutoGrow.MinimumHeight?designEditorConfig.AutoGrow.MinimumHeight.Value+(designEditorConfig.AutoGrow.MinimumHeight.Unit||"px"):"";editableDiv.style.maxHeight=designEditorConfig!==null&&designEditorConfig.AutoGrow&&designEditorConfig.AutoGrow.MaximumHeight?designEditorConfig.AutoGrow.MaximumHeight.Value+(designEditorConfig.AutoGrow.MaximumHeight.Unit||"px"):"";if(editableDiv.style.maxHeight!==""&&designEditorConfig.AutoGrow.PreventResizeBeyondMaximumHeight===true){var contents=designEditorDom.Content;contents.style.maxHeight=editableDiv.style.maxHeight}}if(me.Height().Value!==-1&&me.Height().Unit==="%"){enableDesignEditorHeightMonitor(true)}if(designEditorConfig!==null&&designEditorConfig.InfoPanel&&designEditorConfig.InfoPanel.Text){var infoPanel=document.createElement("div");infoPanel.className="FitUiControlInputInfoPanel";infoPanel.innerHTML=designEditorConfig.InfoPanel.Text;infoPanel.style.cssText="text-align: "+(designEditorConfig.InfoPanel.Alignment?designEditorConfig.InfoPanel.Alignment.toLowerCase():"center");if(designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.Position==="Bottom"){Fit.Dom.InsertBefore(designEditorDom.Content,infoPanel)}else{Fit.Dom.InsertAfter(designEditorDom.Content,infoPanel)}}if(me._internal.Data("toolbar-sticky")==="true"){var toolbarContainer=designEditorDom.Top||designEditorDom.Bottom;if(Fit.Dom.GetComputedStyle(toolbarContainer,"position")==="sticky"){var scrollParent=Fit.Dom.GetScrollParent(me.GetDomElement());if(scrollParent!==null){var toolbarPosition=me._internal.Data("toolbar-position");if(toolbarPosition==="top"){var paddingOffset=Fit.Dom.GetComputedStyle(scrollParent,"padding-top");toolbarContainer.style.top=paddingOffset!=="0px"?"-"+paddingOffset:""}else{var paddingOffset=Fit.Dom.GetComputedStyle(scrollParent,"padding-bottom");toolbarContainer.style.bottom=paddingOffset!=="0px"?"-"+paddingOffset:""}}}}var emojiButton=designEditor.container.$.querySelector("a.cke_button__emojipanel");if(emojiButton!==null){Fit.Events.AddHandler(emojiButton,"click",function(e){if(me.Focused()===false){me.Focused(true)}me._internal.FocusStateLocked(true);setTimeout(function(){var emojiPanel=document.querySelector("div.cke_emoji-panel");if(emojiPanel!==null){Fit.Dom.Data(emojiPanel,"disable-light-dismiss","true");emojiPanel._associatedFitUiControl=me;designEditorActiveToolbarPanel={DomElement:emojiPanel,UnlockFocusStateIfEmojiPanelIsClosed:function(){if(designModeEnabledAndReady()===false||Fit.Dom.IsVisible(emojiPanel)===false||emojiPanel._associatedFitUiControl!==me){designEditorActiveToolbarPanel=null;me._internal.FocusStateLocked(false);if(me.Focused()===false){me._internal.FireOnBlur()}}},CloseEmojiPanel:function(){if(emojiPanel._associatedFitUiControl===me&&Fit.Dom.IsVisible(emojiPanel)===true&&Fit.Dom.Contained(emojiPanel,Fit.Dom.GetFocused())===true){designEditor.focus();designEditorActiveToolbarPanel.UnlockFocusStateIfEmojiPanelIsClosed()}}}}var emojiFrame=emojiPanel.querySelector("iframe");var emojiContent=emojiFrame&&emojiFrame.contentDocument;var emojiContentBlock=emojiContent&&emojiContent.querySelector(".cke_emoji-outer_emoji_block");var emojiContentStatus=emojiContent&&emojiContent.querySelector(".cke_emoji-status_bar");emojiContentBlock&&(emojiContentBlock.style.height="220px");emojiContentStatus&&(emojiContentStatus.style.display="none");var checkClosedId=setInterval(function(){if(me===null){clearInterval(checkClosedId);return}if(designEditorActiveToolbarPanel!==null){designEditorActiveToolbarPanel.UnlockFocusStateIfEmojiPanelIsClosed()}if(designEditorActiveToolbarPanel===null){clearInterval(checkClosedId)}},250)},0)})}designEditor.removeMenuItem("cut");designEditor.removeMenuItem("copy");designEditor.removeMenuItem("paste");updateDesignEditorSize();if(me.Focused()===false){hideToolbarInDesignMode()}setTimeout(function(){if(me===null){return}designEditorDom.OuterContainer.style.visibility="visible";if(me.Focused()===true){designEditor.focus()}},0)},change:function(){if(designEditorCleanEditableDom===true){removeCkeSavedSrcAttributesFromDesignEditor()}if(me._internal.FireOnChangeSuppressed===true){return}if(designEditorDirty===false&&me.Focused()===true){designEditorDirty=true}input.onkeyup()},resize:function(){if(designEditorSuppressOnResize===false){designEditorDom.Editable.style.height="";if(designEditorConfig!==null&&designEditorConfig.AutoGrow&&designEditorConfig.AutoGrow.Enabled===true&&designEditorConfig.AutoGrow.PreventResizeBeyondMaximumHeight!==true){var editableDiv=designEditorDom.Editable;editableDiv.style.minHeight="";editableDiv.style.maxHeight="";var contents=designEditorDom.Content;contents.style.maxHeight=""}me._internal.Data("resized","true");repaint()}},selectionChange:function(ev){var elm=ev.data.selection.getStartElement().$;if(elm.tagName==="IMG"){setTimeout(function(){var imageResizeHandlesContainer=document.querySelector("#ckimgrsz");if(imageResizeHandlesContainer!==null){Fit.Dom.Data(imageResizeHandlesContainer,"disable-light-dismiss","true")}},0)}if(elm.tagName==="A"&&Fit.Dom.Data(elm,"tag-id")!==null){if(designModeEnabledAndReady()===true){designEditorSuppressPaste=true;setTimeout(function(){disableDesignEditorButtons()},0)}}else{designEditorSuppressPaste=false;restoreDesignEditorButtons()}},doubleclick:function(ev){if(ev.data.element.$.tagName==="A"){ev.cancel();return}},paste:function(ev){var html=ev.data.dataValue;var imageTags=html.match(/<img [^>]+?>/g);var updatedImageTags=[];Fit.Array.ForEach(imageTags||[],function(imageTag){var updatedImageTag=imageTag.replace(/\n/g," ");html=html.replace(imageTag,updatedImageTag);updatedImageTags.push(updatedImageTag)});if(designEditorConfig!==null&&designEditorConfig.Plugins&&designEditorConfig.Plugins.Images&&designEditorConfig.Plugins.Images.EmbedType==="blob"&&window.URL&&window.URL.createObjectURL){var dataUrlRegEx=/<img.*? src=(["'])(data:image\/[a-z]+;base64,[A-Za-z0-9+\/=]+)\1/;Fit.Array.ForEach(updatedImageTags,function(img){var imageTagWithDataUrl=img.match(dataUrlRegEx);if(imageTagWithDataUrl!==null){Fit.Core.Base64ToBlob(imageTagWithDataUrl[2],null,false,function(result){if(result.Blob!==null){var newImageDataUrl=URL.createObjectURL(result.Blob);imageBlobUrls.push(newImageDataUrl);html=html.replace(imageTagWithDataUrl[2],newImageDataUrl)}else{Fit.Browser.Log("Error converting base64 image to blob: "+result.Error)}})}})}ev.data.dataValue=html;if(designEditorSuppressPaste===true){setTimeout(function(){ev.editor.execCommand("undo")},0);return}},afterInsertHtml:function(ev){removeCkeSavedSrcAttributesFromDesignEditor()},beforeCommandExec:function(ev){var path=ev.editor.elementPath();if(path===null&&ev.editor.getData().indexOf("<p><a data-tag-id=")===0){ev.cancel();return}else if(path!==null&&Fit.Dom.Data(path.lastElement.$,"tag-id")!==null&&ev.data.name!=="undo"){ev.cancel();return}if(ev&&ev.data&&ev.data.command&&ev.data.command.dialogName){if(me.Focused()===false&&Fit.Browser.GetBrowser()==="MSIE"){ev.cancel();return}if(Fit._internal.Controls.Input.ActiveEditorForDialog){ev.cancel();return}if(me.Focused()===false){me.Focused(true)}me._internal.FocusStateLocked(true);Fit._internal.Controls.Input.ActiveEditorForDialog=me;Fit._internal.Controls.Input.ActiveDialogForEditor=null}},menuShow:function(ev){me._internal.FocusStateLocked(true);if(designEditor.contextMenu.onHide===undefined){var ctxElm=ev.data[0].element.$;Fit.Events.AddHandler(ctxElm,"mousedown",true,function(e){Fit.Events.Stop(e)});var returningFocus=false;designEditor.contextMenu.onHide=function(){if(me._internal.FocusStateLocked()===false||returningFocus===true){return}var focusedElement=Fit.Dom.GetFocused();var contextMenuHasFocus=focusedElement.tagName==="IFRAME"&&focusedElement.className.indexOf("cke_panel_frame")!==-1;if(contextMenuHasFocus===true){returningFocus=true;me.Focused(true);returningFocus=false}else{if(Fit.Dom.GetFocused()===document.body){me.Focused(true)}else{me._internal.FireOnBlur()}}me._internal.FocusStateLocked(false)};designEditor.contextMenu.onHide._fitUiCallback=true}else if(designEditor.contextMenu.onHide._fitUiCallback!==true){throw"Unexpected use of ContextMenu.onHide event!"}}}})}function disableDesignEditorButtons(){var preserveButtonState=designEditorRestoreButtonState===null;if(preserveButtonState===true){designEditorRestoreButtonState={}}Fit.Array.ForEach(designEditor.toolbar,function(toolbarGroup){var items=toolbarGroup.items;Fit.Array.ForEach(toolbarGroup.items,function(item){if(item.command){var cmd=designEditor.getCommand(item.command);if(preserveButtonState===true&&cmd.state!==CKEDITOR.TRISTATE_DISABLED){designEditorRestoreButtonState[item.command]=true}cmd.disable()}else if(item.setState){if(preserveButtonState===true&&item.getState()!==CKEDITOR.TRISTATE_DISABLED){designEditorRestoreButtonState[item.name]=item}item.setState(CKEDITOR.TRISTATE_DISABLED)}})})}function restoreDesignEditorButtons(){if(designEditorRestoreButtonState!==null){Fit.Array.ForEach(designEditorRestoreButtonState,function(commandKey){if(designEditorRestoreButtonState[commandKey]===true){var cmd=designEditor.getCommand(commandKey);cmd.enable()}else{designEditorRestoreButtonState[commandKey].setState(CKEDITOR.TRISTATE_OFF)}});designEditorRestoreButtonState=null}}function updateDesignEditorSize(){if(me.DesignMode()===true&&designEditorHeightMonitorId===-1){if(designEditorUpdateSizeDebouncer!==-1){clearTimeout(designEditorUpdateSizeDebouncer);designEditorUpdateSizeDebouncer=-1}if(designModeEnabledAndReady()===false){designEditorUpdateSizeDebouncer=setTimeout(function(){designEditorUpdateSizeDebouncer=-1;updateDesignEditorSize()},100);return}if(mutationObserverId!==-1){Fit.Events.RemoveMutationObserver(mutationObserverId);mutationObserverId=-1}if(Fit.Dom.IsVisible(me.GetDomElement())===false){mutationObserverId=Fit.Events.AddMutationObserver(me.GetDomElement(),function(elm){if(Fit.Dom.IsVisible(me.GetDomElement())===true){disconnect();mutationObserverId=-1;updateDesignEditorSize()}});return}var h=me.Height();var showHideToolbar=me.Focused()===false;designEditorSuppressOnResize=true;showHideToolbar&&restoreHiddenToolbarInDesignEditor(true);designEditor.resize("100%",h.Value>-1?h.Value+h.Unit:"100%");showHideToolbar&&hideToolbarInDesignMode(true);designEditorSuppressOnResize=false}}function enableDesignEditorHeightMonitor(enable){Fit.Validation.ExpectBoolean(enable);if(enable===true&&designEditorHeightMonitorId===-1){designEditorDom.Editable.style.height="";var toolbarContainer=designEditorDom.Top||designEditorDom.Bottom;var prevHeight=-1;var prevToolbarVisible=toolbarContainer.style.display==="";designEditorHeightMonitorId=setInterval(function(){var newHeight=me.GetDomElement().offsetHeight;var newToolbarVisible=toolbarContainer.style.display==="";if(newHeight>0&&(newHeight!==prevHeight||newToolbarVisible!==prevToolbarVisible)){prevHeight=newHeight;prevToolbarVisible=newToolbarVisible;designEditorSuppressOnResize=true;designEditor.resize("100%",newHeight+"px");designEditorSuppressOnResize=false}},250)}else if(enable===false&&designEditorHeightMonitorId!==-1){clearInterval(designEditorHeightMonitorId);designEditorHeightMonitorId=-1}}function isToolbarHiddenInDesignEditor(){var toolbarContainer=designModeEnabledAndReady()===true?designEditorDom.Top||designEditorDom.Bottom:null;return toolbarContainer!==null&&toolbarContainer.style.display==="none"}function hideToolbarInDesignMode(suppressUpdateEditorSize){Fit.Validation.ExpectBoolean(suppressUpdateEditorSize,true);if(designModeEnabledAndReady()===true&&designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.HideWhenInactive===true){var toolbarContainer=designEditorDom.Top||designEditorDom.Bottom;if(toolbarContainer.style.display==="none"){return}var updateSize=false;if(designEditorHeightMonitorId===-1){var content=designEditorDom.Editable;content.style.height=toolbarContainer.offsetHeight+content.offsetHeight+"px";updateSize=true}toolbarContainer.style.display="none";me._internal.Data("toolbar","false");updateSize===true&&suppressUpdateEditorSize!==true&&updateDesignEditorSize()}}function restoreHiddenToolbarInDesignEditor(suppressUpdateEditorSize){Fit.Validation.ExpectBoolean(suppressUpdateEditorSize,true);if(designModeEnabledAndReady()===true&&designEditorConfig!==null&&designEditorConfig.Toolbar&&designEditorConfig.Toolbar.HideWhenInactive===true){var toolbarContainer=designEditorDom.Top||designEditorDom.Bottom;if(toolbarContainer.style.display===""){return}toolbarContainer.style.display="";if(me._internal.Data("resized")==="false"){var content=designEditorDom.Editable;content.style.height=""}else{var content=designEditorDom.Editable;content.style.height=content.offsetHeight-toolbarContainer.offsetHeight+"px"}me._internal.Data("toolbar","true");if(designEditorHeightMonitorId===-1){suppressUpdateEditorSize!==true&&updateDesignEditorSize()}else{enableDesignEditorHeightMonitor(false);enableDesignEditorHeightMonitor(true)}}}function updateDesignEditorPlaceholder(clearPlaceholder){Fit.Validation.ExpectBoolean(clearPlaceholder,true);if(designModeEnabledAndReady()===true){if(Fit.Browser.GetBrowser()==="MSIE"&&Fit.Browser.GetVersion()<10){return}var val=clearPlaceholder!==true&&me.Value()===""?me.Placeholder():"";Fit.Dom.Data(designEditorDom.Editable,"placeholder",val||null);if(val!==""){designEditorClearPlaceholder=true}}}function openDetachedDesignEditor(){me._internal.FocusStateLocked(true);if(designEditorDetached!==null){designEditorDetached.Open();return}var de=new Fit.Controls.DialogEditor;var cmdOk=new Fit.Controls.Button;var cmdCancel=new Fit.Controls.Button;var setSettings=function(preserveCustomSizeAndPosition){var deConfig=Fit.Core.Clone(designEditorConfig||{});if(designModeEnableImagePlugin()===true){deConfig=Fit.Core.Merge(deConfig,{Plugins:{Images:{Enabled:true,EmbedType:deConfig.Plugins&&deConfig.Plugins.Images&&deConfig.Plugins.Images.EmbedType,RevokeBlobUrlsOnDispose:"UnreferencedOnly",RevokeExternalBlobUrlsOnDispose:false}}})}deConfig.Toolbar=deConfig.Toolbar||{};deConfig.Toolbar.Detach=false;deConfig.Toolbar.Position="Top";deConfig.Toolbar.Sticky=false;deConfig.Toolbar.HideWhenInactive=false;delete deConfig.AutoGrow;var detachConfig=deConfig.Detachable||{};delete deConfig.Detachable;detachConfig=Fit.Core.Merge(detachConfig,{Title:"",Maximizable:true,Maximized:false,Draggable:true,Resizable:true,Width:detachConfig.Width?detachConfig.Width:{Value:850,Unit:"px"},MinimumWidth:detachConfig.MinimumWidth?detachConfig.MinimumWidth:{Value:20,Unit:"em"},MaximumWidth:detachConfig.MaximumWidth?detachConfig.MaximumWidth:{Value:100,Unit:"%"},Height:detachConfig.Height?detachConfig.Height:{Value:550,Unit:"px"},MinimumHeight:detachConfig.MinimumHeight?detachConfig.MinimumHeight:{Value:12,Unit:"em"},MaximumHeight:detachConfig.MaximumHeight?detachConfig.MaximumHeight:{Value:100,Unit:"%"}},Fit.Core.MergeOverwriteBehaviour.Never);de.Title(detachConfig.Title);de.Modal(true);de.Draggable(detachConfig.Draggable);de.Resizable(detachConfig.Resizable);de.Maximizable(detachConfig.Maximizable);de.Maximized(detachConfig.Maximized);preserveCustomSizeAndPosition===false&&de.Width(detachConfig.Width.Value,detachConfig.Width.Unit||"px");preserveCustomSizeAndPosition===false&&de.Height(detachConfig.Height.Value,detachConfig.Height.Unit||"px");de.MinimumWidth(detachConfig.MinimumWidth.Value,detachConfig.MinimumWidth.Unit||"px");de.MinimumHeight(detachConfig.MinimumHeight.Value,detachConfig.MinimumHeight.Unit||"px");de.MaximumWidth(detachConfig.MaximumWidth.Value,detachConfig.MaximumWidth.Unit||"px");de.MaximumHeight(detachConfig.MaximumHeight.Value,detachConfig.MaximumHeight.Unit||"px");preserveCustomSizeAndPosition===false&&de.Reset();de.CheckSpelling(me.CheckSpelling());de._internal.SetDesignModeConfig(deConfig)};var localizeDetachedEditor=function(){cmdOk.Title(locale.Ok);cmdCancel.Title(locale.Cancel)};Fit.Internationalization.OnLocaleChanged(localizeDetachedEditor);Fit.Events.AddHandler(de.GetDomElement(),"keydown",function(e){var ev=Fit.Events.GetEvent(e);if((ev.ctrlKey===true||ev.metaKey===true)&&ev.keyCode===83){cmdOk.Click();Fit.Events.PreventDefault(ev)}});designEditorDetached={IsActive:false,GetValue:function(){return de.Value()},SetVisible:function(val){if(val===false&&de.IsOpen()===true){de.Close();me._internal.FireOnBlur()}else if(val===true&&de.IsOpen()===false){de.Open();me._internal.FireOnFocus()}},SetEnabled:function(val){if(val===false&&de.Enabled()===true){de.Enabled(false);cmdOk.Enabled(false);cmdCancel.Focused(true)}else if(val===true&&de.Enabled()===false){de.Enabled(true);cmdOk.Enabled(true);de.Focused(true)}},Focus:function(){if(de.Enabled()===true){de.Focused(true)}else{cmdCancel.Focused(true)}},Reload:function(){setSettings(true)},Open:function(){designEditorDetached.IsActive=true;de.Value(me.Value());setSettings(false);de.Open()},Close:function(){designEditorDetached.IsActive=false;de.Close()},Dispose:function(){Fit.Internationalization.RemoveOnLocaleChanged(localizeDetachedEditor);de.Dispose();designEditorDetached=null}};cmdOk.Title(locale.Ok);cmdOk.Icon("check");cmdOk.Type(Fit.Controls.ButtonType.Success);cmdOk.OnClick(function(sender){var referencedBlobUrls=Fit.String.ParseImageBlobUrls(de.Value());Fit.Array.ForEach(referencedBlobUrls,function(blobUrl){if(Fit.Array.Contains(imageBlobUrls,blobUrl)===false){Fit.Array.Add(imageBlobUrls,blobUrl)}});me.Value(de.Value());designEditorDetached.Close();me.Focused(true);me._internal.FocusStateLocked(false)});de.AddButton(cmdOk);cmdCancel.Title(locale.Cancel);cmdCancel.Icon("ban");cmdCancel.Type(Fit.Controls.ButtonType.Danger);cmdCancel.OnClick(function(sender){var closeDialog=function(){var referencedBlobUrls=Fit.String.ParseImageBlobUrls(de.Value());Fit.Array.ForEach(referencedBlobUrls,function(blobUrl){if(Fit.Array.Contains(imageBlobUrls,blobUrl)===false){URL.revokeObjectURL(blobUrl)}});var enabled=me.Enabled();designEditorDetached.Close();if(enabled===true){me.Focused(true);me._internal.FocusStateLocked(false)}else{me._internal.FocusStateLocked(false);me._internal.FireOnBlur()}};if(de.Value()!==me.Value()){Fit.Controls.Dialog.Confirm(locale.CancelConfirmTitle+"<br><br>"+locale.CancelConfirmDescription,function(res){if(res===true){closeDialog()}else{cmdCancel.Focused(true)}})}else{closeDialog()}});de.AddButton(cmdCancel);designEditorDetached.Open()}function removeCkeSavedSrcAttributesFromDesignEditor(){var imageTags=designEditorDom.Editable.querySelectorAll("img[data-cke-saved-src]");Fit.Array.ForEach(imageTags,function(img){Fit.Dom.Data(img,"cke-saved-src",null)})}function isTable(element){Fit.Validation.ExpectElement(element);var isTable=false;var elm=element;while(elm!==me.GetDomElement()){if(elm.tagName==="TABLE"){isTable=true;break}elm=elm.parentElement}return isTable}function revertToSingleLineIfNecessary(){if(wasAutoChangedToMultiLineMode===true&&me.Maximizable()===false&&me.Resizable()===Fit.Controls.InputResizing.Disabled&&me.DesignMode()===false){me.MultiLine(false)}}function fireOnChange(){var newVal=me.Value();var compareValue=me.Type()==="Color"?preVal.toUpperCase():preVal;if(newVal!==compareValue){preVal=newVal;me._internal.FireOnChange()}}function reloadEditor(force,reloadConfig){Fit.Validation.ExpectBoolean(force,true);Fit.Validation.ExpectObject(reloadConfig,true);if(force!==true&&(designModeEnabledAndReady()===false||designEditorMustReloadWhenReady===true)){designEditorMustReloadWhenReady=true;designEditorReloadConfig=reloadConfig||designEditorReloadConfig;return}designEditorMustReloadWhenReady=false;var height=me.Height();var currentWasAutoChangedToMultiLineMode=wasAutoChangedToMultiLineMode;var detachedEditor=null;if(designEditorDetached!==null){detachedEditor=designEditorDetached;designEditorDetached=null}me.DesignMode(false);me.DesignMode(true,reloadConfig||designEditorReloadConfig||undefined);designEditorReloadConfig=null;if(detachedEditor!==null){designEditorDetached=detachedEditor;designEditorDetached.Reload()}me.Height(height.Value,height.Unit);wasAutoChangedToMultiLineMode=currentWasAutoChangedToMultiLineMode}function destroyDesignEditorInstance(){designEditor.destroy();if(designEditorDetached!==null){designEditorDetached.Dispose()}if(designEditorGlobalKeyDownEventId!==-1){Fit.Events.RemoveHandler(document,designEditorGlobalKeyDownEventId)}if(designEditorGlobalKeyUpEventId!==-1){Fit.Events.RemoveHandler(document,designEditorGlobalKeyUpEventId)}designEditor=null;designEditorDom=null;designEditorDirtyPending=false;designEditorRestoreButtonState=null;designEditorSuppressPaste=false;designEditorSuppressOnResize=false;designEditorMustReloadWhenReady=false;designEditorMustDisposeWhenReady=false;designEditorActiveToolbarPanel=null;designEditorDetached=null;designEditorClearPlaceholder=true;designEditorCleanEditableDom=false;designEditorGlobalKeyDownEventId=-1;designEditorGlobalKeyUpEventId=-1;if(designEditorUpdateSizeDebouncer!==-1){clearTimeout(designEditorUpdateSizeDebouncer);designEditorUpdateSizeDebouncer=-1}if(designEditorHeightMonitorId!==-1){clearInterval(designEditorHeightMonitorId);designEditorHeightMonitorId=-1}if(mutationObserverId!==-1){Fit.Events.RemoveMutationObserver(mutationObserverId);mutationObserverId=-1}if(rootedEventId!==-1){Fit.Events.RemoveHandler(me.GetDomElement(),rootedEventId);rootedEventId=-1}if(createWhenReadyIntervalId!==-1){clearInterval(createWhenReadyIntervalId);createWhenReadyIntervalId=-1}}function designModeEnabledAndReady(){return designEditorDom!==null}function designModeEnableImagePlugin(){var config=designEditorConfig||{};var enableImagePlugin=config.Plugins&&config.Plugins.Images&&config.Plugins.Images.Enabled===true||config.Toolbar&&config.Toolbar.Images===true||false;if(enableImagePlugin===false&&designEditorDetached!==null&&designEditorDetached.GetValue().indexOf("<img ")>-1){enableImagePlugin=true}if(enableImagePlugin===false&&me.Value().indexOf("<img ")>-1){enableImagePlugin=true}return enableImagePlugin}function localize(){locale=Fit.Internationalization.GetLocale(me);if(me.DesignMode()===true){var detachedEditor=null;if(designEditorDetached!==null){detachedEditor=designEditorDetached;designEditorDetached=null}reloadEditor();if(detachedEditor!==null){designEditorDetached=detachedEditor}}}function repaint(){if(isIe8===true){me.AddCssClass("FitUi_Non_Existing_Input_Class");me.RemoveCssClass("FitUi_Non_Existing_Input_Class")}}init()};Fit.Controls.InputType={Textarea:"Textarea",Color:"Color",Date:"Date",DateTime:"DateTime",Email:"Email",Month:"Month",Number:"Number",Password:"Password",PhoneNumber:"PhoneNumber",Text:"Text",Time:"Time",Week:"Week",Unknown:"Unknown"};Fit.Controls.Input.Type=Fit.Controls.InputType;Fit._internal.Controls.Input={};Fit._internal.Controls.Input.Editor={Skin:null};Fit.Controls.InputResizing={Enabled:"Enabled",Disabled:"Disabled",Horizontal:"Horizontal",Vertical:"Vertical"};Fit.Internationalization.AddLocalization(Fit.Controls.Input,{en:{Detach:"Open in dialog",Ok:"OK",Cancel:"Cancel",CancelConfirmTitle:"Discard changes?",CancelConfirmDescription:"Are you sure you want to discard the changes?",TableTools:"Table tools",CreateTable:"Create table",NumberOfColumns:"Number of columns",NumberOfRows:"Number of rows",CreateTableTooLarge:"Table is getting too large - reduce number of columns or rows",InsertRowAbove:"Insert row above",InsertRowBelow:"Insert row below",DeleteRow:"Delete row",InsertColumnBefore:"Insert column before",InsertColumnAfter:"Insert column after",DeleteColumn:"Delete column",DeleteTable:"Delete table"},da:{Detach:"Åben i dialog",Ok:"OK",Cancel:"Annullér",CancelConfirmTitle:"Annullér ændringer?",CancelConfirmDescription:"Er du sikker på at du vil annullere ændringerne?",TableTools:"Tabelværktøjer",CreateTable:"Opret tabel",NumberOfColumns:"Antal kolonner",NumberOfRows:"Antal rækker",CreateTableTooLarge:"Tabellen bliver for stor - reducer antal kolonner eller rækker",InsertRowAbove:"Indsæt række over",InsertRowBelow:"Indsæt række under",DeleteRow:"Slet række",InsertColumnBefore:"Indsæt kolonne før",InsertColumnAfter:"Indsæt kolonne efter",DeleteColumn:"Slet kolonne",DeleteTable:"Slet tabel"},de:{Detach:"Im Dialog öffnen",Ok:"OK",Cancel:"Abbrechen",CancelConfirmTitle:"Änderungen verwerfen?",CancelConfirmDescription:"Möchten Sie die Änderungen wirklich verwerfen?",TableTools:"Tabellenwerkzeuge",CreateTable:"Tabelle erstellen",NumberOfColumns:"Anzahl der Spalten",NumberOfRows:"Anzahl der Zeilen",CreateTableTooLarge:"Tabelle wird zu groß - reduzieren Sie die Anzahl der Spalten oder Zeilen",InsertRowAbove:"Zeile oben einfügen",InsertRowBelow:"Zeile unten einfügen",DeleteRow:"Zeile löschen",InsertColumnBefore:"Spalte davor einfügen",InsertColumnAfter:"Spalte danach einfügen",DeleteColumn:"Spalte löschen",DeleteTable:"Tabelle löschen"},no:{Detach:"Åpne i dialog",Ok:"OK",Cancel:"Avbryt",CancelConfirmTitle:"Avbryt endringer?",CancelConfirmDescription:"Er du sikker på at du vil avbryte endringene?",TableTools:"Tabellverktøy",CreateTable:"Opprett tabell",NumberOfColumns:"Antall kolonner",NumberOfRows:"Antall rader",CreateTableTooLarge:"Tabellen blir for stor - reduser antall kolonner eller rader",InsertRowAbove:"Sett inn rad over",InsertRowBelow:"Sett inn rad under",DeleteRow:"Slett rad",InsertColumnBefore:"Sett inn kolonne før",InsertColumnAfter:"Sett inn kolonne etter",DeleteColumn:"Slett kolonne",DeleteTable:"Slett tabell"}});Fit.Controls.ListView=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.PickerBase).Apply();Fit.Core.Extend(this,Fit.Controls.Component).Apply(controlId);var me=this;var list=me.GetDomElement();var active=null;var persistView=false;var scrollPositionTop=0;var highlightFirst=false;var firstWasHighlighted=false;var htmlAllowed=false;var isIe8=Fit.Browser.GetInfo().Name==="MSIE"&&Fit.Browser.GetInfo().Version===8;var onSelectHandlers=[];var onSelectedHandlers=[];function init(){list.tabIndex="0";Fit.Dom.AddClass(list,"FitUiControlListView");me.OnShow(function(){if(persistView===false){if(highlightFirst===true){focusFirstItem()}else{setActive(null)}list.scrollTop=0}else{if(highlightFirst===true&&firstWasHighlighted===false){focusFirstItem();firstWasHighlighted=true}list.scrollTop=scrollPositionTop}});list.onscroll=function(e){scrollPositionTop=list.scrollTop};list.onclick=function(e){var ev=Fit.Events.GetEvent(e);var elm=Fit.Events.GetTarget(e);if(elm===list)return;while(elm.parentElement!==list)elm=elm.parentElement;setActive(elm,true);var item=convertItemElementToObject(elm);var selectionCanceled=fireOnSelectHandlers(item)===false;if(selectionCanceled===false&&me._internal.FireOnItemSelectionChanging(item.Title,item.Value,false,false)===true){fireOnSelectedHandlers(item);me._internal.FireOnItemSelectionChanged(item.Title,item.Value,true,false);me._internal.FireOnItemSelectionComplete()}};list.onfocus=function(e){me._internal.FireOnFocusIn();if(Fit.Events.GetPointerState().Buttons.Primary===true)return;if(Fit.Events.GetModifierKeys().Shift===true){if(list.children.length>0)setActive(list.children[list.children.length-1])}else{if(list.children.length>0)setActive(list.children[0])}};list.onblur=function(e){setActive(null);me._internal.FireOnFocusOut()};list.onkeydown=function(e){var ev=Fit.Events.GetEvent(e);if(ev.keyCode===9&&ev.shiftKey===false){if(active!==list.children[list.children.length-1]){moveDown();Fit.Events.PreventDefault(ev);return false}}else if(ev.keyCode===9&&ev.shiftKey===true){if(active!==list.firstChild){moveUp();Fit.Events.PreventDefault(ev);return false}}else{me.HandleEvent(ev)}}}this.HtmlAllowed=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&htmlAllowed!==val){htmlAllowed=val;Fit.Array.ForEach(list.children,function(entry){if(val===false){Fit.Dom.Text(entry,Fit.String.StripHtml(entry._orgTitle))}else{entry.innerHTML=entry._orgTitle}})}return htmlAllowed};this.AddItem=function(title,value){Fit.Validation.ExpectString(title);Fit.Validation.ExpectString(value);var entry=document.createElement("div");entry._orgTitle=title;if(me.HtmlAllowed()===false){Fit.Dom.Text(entry,Fit.String.StripHtml(title))}else{entry.innerHTML=title}Fit.Dom.Data(entry,"value",encode(value));Fit.Dom.Data(entry,"active","false");list.appendChild(entry)};this.GetItem=function(value){Fit.Validation.ExpectString(value);var itemElm=getItemElement(value);if(itemElm!==null){return convertItemElementToObject(itemElm)}return null};this.GetItems=function(){var items=[];Fit.Array.ForEach(list.children,function(child){Fit.Array.Add(items,convertItemElementToObject(child))});return items};this.HasItem=function(value){Fit.Validation.ExpectString(value);return getItemElement(value)!==null};this.RemoveItem=function(value){Fit.Validation.ExpectString(value);var item=getItemElement(value);if(item!==null){Fit.Dom.Remove(item);if(item===active){active=null}}};this.RemoveItems=function(){list.innerHTML="";setActive(null)};this.GetItemByValue=function(val){Fit.Validation.ExpectString(val);return me.GetItem(val)};this.RevealItemInView=function(val){Fit.Validation.ExpectString(val);var itemElm=getItemElement(val);if(itemElm!==null){setActive(itemElm)}};this.HandleEvent=function(e){Fit.Validation.ExpectEvent(e,true);var ev=Fit.Events.GetEvent(e);if(ev.type==="keydown"){if(ev.keyCode===38){moveUp();Fit.Events.PreventDefault(ev)}else if(ev.keyCode===40){moveDown();Fit.Events.PreventDefault(ev)}else if(ev.keyCode===13){if(active===null&&list.children.length===1)moveDown();if(active!==null){var item=convertItemElementToObject(active);var selectionCanceled=fireOnSelectHandlers(item)===false;if(selectionCanceled===false&&me._internal.FireOnItemSelectionChanging(item.Title,item.Value,false,false)===true){fireOnSelectedHandlers(item);me._internal.FireOnItemSelectionChanged(item.Title,item.Value,true,false);me._internal.FireOnItemSelectionComplete()}}Fit.Events.PreventDefault(ev)}}};this.GetHighlighted=function(){if(active!==null){return convertItemElementToObject(active)}return null};this.PersistView=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==persistView){persistView=val;scrollPositionTop=0}return persistView};this.HighlightFirst=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val!==highlightFirst){highlightFirst=val;firstWasHighlighted=false}if(val===true&&Fit.Dom.IsVisible(me.GetDomElement())===true){focusFirstItem();firstWasHighlighted=true}}return highlightFirst};this.OnSelect=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSelectHandlers,cb)};this.OnSelected=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSelectedHandlers,cb)};this.Destroy=Fit.Core.CreateOverride(this.Destroy,function(calledInternally){Fit.Validation.ExpectBoolean(calledInternally,true);if(calledInternally!==true){me.Dispose(true)}base()});this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(calledInternally){Fit.Validation.ExpectBoolean(calledInternally,true);base();if(calledInternally!==true){me.Destroy(true)}me=list=active=persistView=scrollPositionTop=highlightFirst=firstWasHighlighted=htmlAllowed=isIe8=onSelectHandlers=onSelectedHandlers=null});this._internal=this._internal?this._internal:{};this._internal.FocusFirstItem=function(){if(Fit.Dom.IsVisible(me.GetDomElement())===true){focusFirstItem();firstWasHighlighted=true}};function getItemElement(value){Fit.Validation.ExpectString(value);var found=null;Fit.Array.ForEach(list.children,function(child){if(decode(Fit.Dom.Data(child,"value"))===value){found=child;return false}});return found}function convertItemElementToObject(elm){Fit.Validation.ExpectDomElement(elm);return{Title:elm._orgTitle,Value:decode(Fit.Dom.Data(elm,"value"))}}function setActive(elm,suppressScrollIntoView){Fit.Validation.ExpectDomElement(elm,true);Fit.Validation.ExpectBoolean(suppressScrollIntoView,true);if(active!==null)Fit.Dom.Data(active,"active","false");active=elm?elm:null;if(active!==null){Fit.Dom.Data(active,"active","true");if(suppressScrollIntoView!==true){list.scrollTop=active.offsetHeight*Fit.Dom.GetIndex(active);repaint()}}}function focusFirstItem(){if(list.children.length>0){setActive(list.children[0])}}function moveUp(){if(list.children.length===0)return;if(active===null){setActive(list.firstChild)}else if(active.previousSibling!==null){setActive(active.previousSibling)}}function moveDown(){if(list.children.length===0)return;if(active===null){setActive(list.firstChild)}else if(active.nextSibling!==null){setActive(active.nextSibling)}}function fireOnSelectHandlers(item){Fit.Validation.ExpectObject(item);Fit.Validation.ExpectString(item.Title);Fit.Validation.ExpectString(item.Value);var selectionCanceled=false;Fit.Array.ForEach(onSelectHandlers,function(handler){if(handler(me,item)===false){selectionCanceled=true}});return selectionCanceled===true?false:true}function fireOnSelectedHandlers(item){Fit.Validation.ExpectObject(item);Fit.Validation.ExpectString(item.Title);Fit.Validation.ExpectString(item.Value);Fit.Array.ForEach(onSelectedHandlers,function(handler){handler(me,item)})}function repaint(){if(isIe8===true){Fit.Dom.AddClass(list,"FitUi_Non_Existing_ListView_Class");Fit.Dom.RemoveClass(list,"FitUi_Non_Existing_ListView_Class")}}function decode(str){Fit.Validation.ExpectString(str);return decodeURIComponent(str)}function encode(str){Fit.Validation.ExpectString(str);return encodeURIComponent(str)}init()};Fit.Controls.WSListView=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.ListView).Apply(ctlId);var me=this;var url=null;var jsonpCallback=null;var dataLoading=false;var onDataLoadedCallback=[];var onRequestHandlers=[];var onResponseHandlers=[];var onAbortHandlers=[];var onPopulatedHandlers=[];function init(){}this.Url=function(wsUrl){Fit.Validation.ExpectString(wsUrl,true);if(Fit.Validation.IsSet(wsUrl)===true){url=wsUrl}return url};this.JsonpCallback=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true||val===null){jsonpCallback=val}return jsonpCallback};this.Reload=function(cb){Fit.Validation.ExpectFunction(cb,true);if(dataLoading===true){onDataLoaded(function(){me.Reload(cb)});return}dataLoading=true;getData(function(){dataLoading=false;if(Fit.Validation.IsSet(cb)===true){cb(me)}fireOnDataLoaded()})};this.Destroy=Fit.Core.CreateOverride(this.Destroy,function(){me=url=jsonpCallback=dataLoading=onDataLoadedCallback=onRequestHandlers=onResponseHandlers=onAbortHandlers=onPopulatedHandlers=null;base()});this.OnRequest=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onRequestHandlers,cb)};this.OnResponse=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onResponseHandlers,cb)};this.OnAbort=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onAbortHandlers,cb)};this.OnPopulated=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onPopulatedHandlers,cb)};function getData(cb){Fit.Validation.ExpectFunction(cb,true);if(url===null)Fit.Validation.ThrowError("Unable to get data, no WebService URL has been specified");var request=null;if(jsonpCallback!==null){request=new Fit.Http.JsonpRequest(url,jsonpCallback)}else{request=new Fit.Http.JsonRequest(url)}var eventArgs={Sender:me,Request:request,Items:null};if(fireEventHandlers(onRequestHandlers,eventArgs)===false)return;if(eventArgs.Request!==request){Fit.Validation.ExpectInstance(eventArgs.Request,Fit.Http.Request);request=eventArgs.Request}var onSuccess=function(data){if(me===null)return;eventArgs.Items=data instanceof Array?data:[];fireEventHandlers(onResponseHandlers,eventArgs);me.RemoveItems();Fit.Array.ForEach(eventArgs.Items,function(item){populate(item)});if(me.PersistView()===true){me.PersistView(false);me.PersistView(true)}if(me.HighlightFirst()===true){me.HighlightFirst(false);me.HighlightFirst(true);me._internal.FocusFirstItem()}if(Fit.Validation.IsSet(cb)===true){cb()}fireEventHandlers(onPopulatedHandlers,eventArgs)};var onFailure=function(httpStatusCode){if(me===null)return;Fit.Validation.ThrowError("Unable to get data - request failed with HTTP Status code "+httpStatusCode)};var onAbort=function(){if(me===null)return;fireEventHandlers(onAbortHandlers,eventArgs)};if(Fit.Core.InstanceOf(request,Fit.Http.JsonpRequest)===false){request.OnSuccess(function(req){var data=request.GetResponseJson();onSuccess(data)});request.OnFailure(function(req){onFailure(request.GetHttpStatus())});request.OnAbort(function(req){onAbort()})}else{request.OnSuccess(function(req){var children=req.GetResponse();onSuccess(children)});request.OnTimeout(function(){onFailure("UNKNOWN (JSONP)")})}request.Start()}function onDataLoaded(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onDataLoadedCallback,cb)}function fireOnDataLoaded(){var orgOnDataLoadedCallback=onDataLoadedCallback;onDataLoadedCallback=[];Fit.Array.ForEach(orgOnDataLoadedCallback,function(cb){cb()})}function populate(jsonItem){Fit.Validation.ExpectIsSet(jsonItem);Fit.Validation.ExpectString(jsonItem.Value);Fit.Validation.ExpectString(jsonItem.Title,true);Fit.Validation.ExpectBoolean(jsonItem.Selectable,true);Fit.Validation.ExpectArray(jsonItem.Children,true);if(jsonItem.Selectable!==false)me.AddItem(jsonItem.Title?jsonItem.Title:jsonItem.Value,jsonItem.Value);if(jsonItem.Children){Fit.Array.ForEach(jsonItem.Children,function(c){populate(c)})}}function fireEventHandlers(handlers,eventArgs){var cancel=false;Fit.Array.ForEach(handlers,function(cb){if(cb(me,eventArgs)===false)cancel=true});return!cancel}init()};Fit.Controls.ProgressBar=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.Component).Apply(controlId);var me=this;var id=me.GetId();var element=me.GetDomElement();var status=null;var title="";var width={Value:200,Unit:"px"};var onProgressHandlers=[];function init(){Fit.Dom.AddClass(element,"FitUiControl");Fit.Dom.AddClass(element,"FitUiControlProgressBar");status=document.createElement("div");status.style.width="0%";Fit.Dom.AddClass(status,"FitUiControlProgressBarStatus");Fit.Dom.Add(element,status);title=document.createElement("span");Fit.Dom.Add(status,title)}this.Title=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){title.innerHTML=val}return title.innerHTML};this.Width=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){if(val>-1){width={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};element.style.width=width.Value+width.Unit}else{width={Value:200,Unit:"px"};element.style.width=""}}return width};this.Progress=function(val){Fit.Validation.ExpectInteger(val,true);if(Fit.Validation.IsSet(val)===true&&val>=0&&val<=100&&status.style.width!==val+"%"){status.style.width=val+"%";Fit.Array.ForEach(onProgressHandlers,function(cb){cb(me)})}return parseInt(status.style.width)};this.OnProgress=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onProgressHandlers,cb)};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){me=id=element=status=title=width=onProgressHandlers=null;base()});init()};Fit.Controls.SoftLog=function(controlId){Fit.Validation.ExpectStringValue(controlId,true);Fit.Core.Extend(this,Fit.Controls.Component).Apply(controlId);var me=this;var txt=null;var maxEntries=100;var height={Value:-1,Unit:"px"};var orgConsoleLog=null;var exceptionEventHandlerId=-1;function init(){var dom=me.GetDomElement();Fit.Dom.AddClass(dom,"FitUiControl");Fit.Dom.AddClass(dom,"FitUiControlSoftLog");txt=document.createElement("textarea");txt.readOnly=true;Fit.Dom.Add(dom,txt)}this.CatchUncaughtExceptions=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&exceptionEventHandlerId===-1){exceptionEventHandlerId=Fit.Events.AddHandler(window,"error",function(e){var ev=Fit.Events.GetEvent(e);me.Log(ev.message+" ("+ev.filename+":"+ev.lineno+")")})}else if(val===false&&exceptionEventHandlerId!==-1){Fit.Events.RemoveHandler(window,exceptionEventHandlerId);exceptionEventHandlerId=-1}}return exceptionEventHandlerId!==-1};this.InterceptConsoleLog=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true&&orgConsoleLog===null){orgConsoleLog=window.console.log;window.console.log=function(){orgConsoleLog.apply(this,arguments);Fit.Array.ForEach(arguments,function(arg){if(Fit.Array.Contains(["string","number","function","boolean"],typeof arg)){me.Log(arg.toString())}else if(arg===null||arg===undefined||arg instanceof Date){me.Log(arg+"")}else if(arg.tagName&&arg.outerHTML){me.Log(arg.cloneNode(false).outerHTML)}else{me.Log(JSON.stringify(arg))}})}}else if(val===false&&orgConsoleLog!==null){window.console.log=orgConsoleLog;orgConsoleLog=null}}return orgConsoleLog!==null};this.MaxEntries=function(val){Fit.Validation.ExpectInteger(val,true);if(Fit.Validation.IsSet(val)===true){if(val>0){maxEntries=val;trimLog(false)}else{maxEntries=-1}}return maxEntries};this.Height=function(val,unit){Fit.Validation.ExpectNumber(val,true);Fit.Validation.ExpectStringValue(unit,true);if(Fit.Validation.IsSet(val)===true){if(val>-1){height={Value:val,Unit:Fit.Validation.IsSet(unit)===true?unit:"px"};txt.style.height=height.Value+height.Unit}else{height={Value:-1,Unit:"px"};txt.style.height=""}}return height};this.Log=function(msg){Fit.Validation.ExpectString(msg);var dt=new Date;var ms=dt.getMilliseconds();var time=Fit.Date.Format(dt,"hh:mm:ss")+"."+(ms===0?"000":ms<10?"00"+ms:ms<100?"0"+ms:ms);trimLog(true);txt.value+=(txt.value!==""?"\n":"")+time+": "+msg.replace(/\r/g,"").replace(/\n/g," ");if(Fit.Dom.GetFocused()!==txt){txt.scrollLeft=0;txt.scrollTop=999999}};this.Clear=function(){txt.value=""};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){if(orgConsoleLog!==null){window.console.log=orgConsoleLog}if(exceptionEventHandlerId!==-1){Fit.Events.RemoveHandler(window,exceptionEventHandlerId)}me=txt=maxEntries=height=orgConsoleLog=exceptionEventHandlerId=null;base()});function trimLog(leaveRoomForNewLogEntry){Fit.Validation.ExpectBoolean(leaveRoomForNewLogEntry);if(maxEntries>0){var messages=txt.value!==""?txt.value.split("\n"):[];if(messages.length>=maxEntries){messages=maxEntries===1&&leaveRoomForNewLogEntry===true?[]:messages.slice((maxEntries-(leaveRoomForNewLogEntry===true?1:0))*-1)}txt.value=messages.join("\n")}}init()};Fit.Controls.TreeView=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.PickerBase).Apply();Fit.Core.Extend(this,Fit.Controls.ControlBase).Apply(ctlId);var me=this;var rootContainer=null;var rootNode=null;var focusInEventId=-1;var keyNavigationEnabled=true;var selectable=false;var multiSelect=false;var showSelectAll=false;var allowDeselect=true;var revealExpandedNodes=false;var persistView=false;var scrollPosition={X:0,Y:0};var highlightFirst=false;var firstWasHighlighted=false;var selected=createInternalCollection();var selectedOrg=[];var ctx=null;var onSelectHandlers=[];var onSelectedHandlers=[];var onToggleHandlers=[];var onToggledHandlers=[];var onSelectAllHandlers=[];var onSelectAllCompleteHandlers=[];var onContextMenuHandlers=[];var forceClear=false;var isIe8=Fit.Browser.GetInfo().Name==="MSIE"&&Fit.Browser.GetInfo().Version===8;function init(){me.AddCssClass("FitUiControlTreeView");me._internal.Data("selectable","false");me._internal.Data("multiselect","false");me._internal.Data("wordwrap","false");me._internal.Data("picker","false");me._internal.Data("htmlallowed","false");rootContainer=document.createElement("ul");me._internal.AddDomElement(rootContainer);rootNode=new Fit.Controls.TreeViewNode(" ","TREEVIEW_ROOT_NODE");rootNode.GetDomElement().tabIndex=-1;rootContainer.appendChild(rootNode.GetDomElement());var treeViewNodeInterface={Select:function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(multiSelect===false&&selected.length>0)executeWithNoOnChange(function(){selected[0].Selected(false)});Fit.Array.Add(selected,node)},Deselect:function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Array.Remove(selected,node)},Selected:function(val){Fit.Validation.ExpectArray(val,true);return me.Selected(val)},IsSelectable:function(){return selectable},IsMultiSelect:function(){return multiSelect},ShowSelectAll:function(){return showSelectAll},Repaint:function(){repaint()},FireToggle:function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);return fireEventHandlers(onToggleHandlers,node)},FireToggled:function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);return fireEventHandlers(onToggledHandlers,node)},FireSelect:function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(forceClear===false&&multiSelect===false&&selected.length>0&&selected[0].Selectable()===false)return false;return fireEventHandlers(onSelectHandlers,node)},FireSelected:function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);fireEventHandlers(onSelectedHandlers,node)},FireOnChange:function(){me._internal.FireOnChange()},GetTreeView:function(){return me},Dissociate:function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(node===activeNode){Fit.Dom.Data(activeNode.GetDomElement(),"active",null);activeNode=null}}};rootNode.GetDomElement()._internal.TreeView=treeViewNodeInterface;rootNode.GetDomElement().onkeydown=function(e){var ev=Fit.Events.GetEvent(e);var elm=Fit.Events.GetTarget(e);if(keyNavigationEnabled===false)return;if(isPicker===true&&isNodeSet(activeNode)===false){focusFirstNode();return}if(elm.tagName!=="LI"&&isPicker===true&&isNodeSet(activeNode)===true)elm=activeNode.GetDomElement();if(elm.tagName!=="LI")return;if(elm===rootNode.GetDomElement()){if(rootNode.GetChildren().length>0)focusNode(rootNode.GetChildren()[0]);Fit.Events.PreventDefault(ev);return}var node=elm._internal.Node;if(ev.keyCode===93||Fit.Events.GetModifierKeys().Shift===true&&ev.keyCode===121){var label=node.GetDomElement().querySelector("span");var pos=Fit.Dom.GetPosition(label);var scrollContainers=Fit.Dom.GetScrollPosition(label);var scrollDocument=Fit.Dom.GetScrollPosition(document.body);pos.X=pos.X-scrollContainers.X+scrollDocument.X+label.offsetWidth-10;pos.Y=pos.Y-scrollContainers.Y+scrollDocument.Y+label.offsetHeight-5;openContextMenu(node,pos);Fit.Events.PreventDefault(ev);return}if(ev.keyCode===13){if(node.Selectable()===true&&me.Enabled()===true){node.Selected(true)}else{var links=node.GetDomElement().getElementsByTagName("a");if(links.length===1){if(links[0].click){links[0].click()}else{var clickEvent=document.createEvent("MouseEvent");clickEvent.initEvent("click",true,true);links[0].dispatchEvent(clickEvent)}}}Fit.Events.PreventDefault(ev);return}if(ev.keyCode===32){if(node.Selectable()===true&&me.Enabled()===true)toggleNodeSelection(node);Fit.Events.PreventDefault(ev);return}var next=null;if(ev.keyCode===37){if(node.Expanded()===true){node.Expanded(false)}else{next=node.GetParent()}Fit.Events.PreventDefault(ev)}else if(ev.keyCode===39){if(node.Expanded()===false&&node.GetChildren().length>0)node.Expanded(true);Fit.Events.PreventDefault(ev)}else if(ev.keyCode===38){next=getNodeAbove(node);Fit.Events.PreventDefault(ev)}else if(ev.keyCode===40){next=getNodeBelow(node);Fit.Events.PreventDefault(ev)}if(next!==null)focusNode(next)};rootNode.GetDomElement().onclick=function(e){var elm=Fit.Events.GetTarget(e);if(elm.tagName==="INPUT"&&elm.parentElement.tagName==="LI")elm.checked=!elm.checked;var nodeElm=elm.tagName==="LI"?elm:Fit.Dom.GetParentOfType(elm,"LI");var node=nodeElm._internal.Node;focusNode(node);if(elm===node.GetDomElement().children[0])node.Expanded(!node.Expanded());if(elm!==node.GetDomElement().children[0]&&node.Selectable()===true){toggleNodeSelection(node)}};if(Fit.Browser.GetBrowser()!=="MSIE"){var reclaimFocus=false;Fit.Events.AddHandler(me.GetDomElement(),"mousedown",true,function(e){if(Fit.Events.GetTarget(e)===me.GetDomElement()){var parent=me.GetDomElement();while((parent=parent.parentElement)!==null){if(Fit.Dom.Attribute(parent,"tabindex")!==null){reclaimFocus=true;break}}}});focusInEventId=Fit.Events.AddHandler(document,"focus",true,function(e){if(reclaimFocus===true){reclaimFocus=false;rootNode.GetDomElement().focus()}})}Fit.Events.AddHandler(me.GetDomElement(),"contextmenu",function(e){return Fit.Events.PreventDefault(e)});Fit.Events.AddHandler(me.GetDomElement(),"mouseup",function(e){if(Fit.Events.GetPointerState().Buttons.Secondary===true){var target=Fit.Events.GetTarget(e);if(target!==me.GetDomElement()){var node=target.tagName==="LI"?target._internal.Node:Fit.Dom.GetParentOfType(target,"li")._internal.Node;openContextMenu(node)}return Fit.Events.PreventDefault(e)}});var touchTimeout=-1;Fit.Events.AddHandler(me.GetDomElement(),"touchstart",function(e){var target=Fit.Events.GetTarget(e);if(target!==me.GetDomElement()){touchTimeout=setTimeout(function(){if(me===null){return}var node=target.tagName==="LI"?target._internal.Node:Fit.Dom.GetParentOfType(target,"li")._internal.Node;openContextMenu(node);touchTimeout=-1},500)}});Fit.Events.AddHandler(me.GetDomElement(),"touchend",function(e){var elm=Fit.Events.GetTarget(e);if(touchTimeout!==-1){clearTimeout(touchTimeout);touchTimeout=-1}});Fit.Events.AddHandler(me.GetDomElement(),"scroll",function(e){scrollPosition.X=me.GetDomElement().scrollLeft;scrollPosition.Y=me.GetDomElement().scrollTop})}this.WordWrap=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){me._internal.Data("wordwrap",val.toString());repaint()}return me._internal.Data("wordwrap")==="true"};this.HtmlAllowed=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){me._internal.Data("htmlallowed",val.toString());var nodes=rootNode.GetChildren();Fit.Array.ForEach(nodes,function(node){node.HtmlAllowed(val,true)})}return me._internal.Data("htmlallowed")==="true"};this.Selectable=function(val,multi,showSelAll){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(multi,true);Fit.Validation.ExpectBoolean(showSelAll,true);if(Fit.Validation.IsSet(val)===true){selectable=val;multiSelect=multi===true?true:false;showSelectAll=showSelAll===true?true:false;me._internal.Data("selectable",selectable.toString());me._internal.Data("multiselect",multiSelect.toString());var fireOnChange=selected.length>0;selected=createInternalCollection();if(me.Value()!==""){Fit.Browser.Debug("TreeView: Selectable changed - Selections will be cleared")}executeWithNoOnChange(function(){executeRecursively(rootNode,function(n){if(n===rootNode)return;n.Selectable(selectable,multiSelect,showSelectAll);n.Selected(false)})});repaint();if(fireOnChange===true)me._internal.FireOnChange()}return selectable};this.Selected=function(val){Fit.Validation.ExpectArray(val,true);if(Fit.Validation.IsSet(val)===true){selectedOrg=[];var fireOnChange=selected.length>0;executeWithNoOnChange(function(){me.Clear();Fit.Array.ForEach(val,function(n){Fit.Validation.ExpectInstance(n,Fit.Controls.TreeViewNode);var node=n.GetTreeView()===me?n:me.GetChild(n.Value(),true);if(node===null)Fit.Validation.ThrowError("Node is not associated with this TreeView, unable to change selection");Fit.Array.Add(selectedOrg,node);node.Selected(true);fireOnChange=true})});if(fireOnChange===true)me._internal.FireOnChange()}return Fit.Array.Copy(selected)};this.SelectAll=function(selected,selectAllNode){Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectInstance(selectAllNode,Fit.Controls.TreeViewNode,true);var node=selectAllNode?selectAllNode:null;if(me._internal.FireOnSelectAll(selected,node)===false)return;var changed=false;executeWithNoOnChange(function(){var nodes=node!==null?node.GetChildren():rootNode.GetChildren();Fit.Array.Recurse(nodes,"GetChildren",function(child){if(child.Selectable()===true){if(child.Selected()!==selected){changed=true;child.Selected(selected)}}})});me._internal.FireOnSelectAllComplete(selected,node);if(changed===true)me._internal.FireOnChange()};this.ExpandAll=function(maxDepth){Fit.Validation.ExpectInteger(maxDepth,true);Fit.Array.CustomRecurse(me.GetChildren(),function(node){node.Expanded(true);return node.GetLevel()+1<(maxDepth||99999)?node.GetChildren():null})};this.CollapseAll=function(maxDepth){Fit.Validation.ExpectInteger(maxDepth,true);Fit.Array.CustomRecurse(me.GetChildren(),function(node){node.Expanded(false);return node.GetLevel()+1<(maxDepth||99999)?node.GetChildren():null})};this.AllowDeselect=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){allowDeselect=val}return allowDeselect};this.Value=function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){selectedOrg=preserveDirtyState!==true?[]:selectedOrg;var fireOnChange=selected.length>0;executeWithNoOnChange(function(){me.Clear();var values=val.split(";");Fit.Array.ForEach(values,function(nodeValue){var nodeVal=decodeReserved(nodeValue.indexOf("=")===-1?nodeValue:nodeValue.split("=")[1]);var child=me.GetChild(nodeVal,true);if(child!==null){if(preserveDirtyState!==true){Fit.Array.Add(selectedOrg,child)}child.Selected(true);fireOnChange=true}})});if(fireOnChange===true)me._internal.FireOnChange()}var nodes=me.Selected();var value="";Fit.Array.ForEach(nodes,function(node){value+=(value!==""?";":"")+encodeReserved(node.Title())+"="+encodeReserved(node.Value())});return value};this.IsDirty=function(){if(selected.length!==selectedOrg.length)return true;var dirty=false;Fit.Array.ForEach(selectedOrg,function(node){if(Fit.Array.Contains(selected,node)===false){dirty=true;return false}});return dirty};this.Focused=function(focus){Fit.Validation.ExpectBoolean(focus,true);if(Fit.Validation.IsSet(focus)===true){var focused=getNodeFocused();if(focus===true&&focused===null){var nodes=rootNode.GetChildren();if(nodes.length>0)nodes[0].Focused(true)}else if(focus===false&&focused!==null){focused.Focused(false)}}return getNodeFocused()!==null};this.Lines=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true){me.AddCssClass("FitUiControlTreeViewLines");me.AddCssClass("FitUiControlTreeViewDotLines")}else{me.RemoveCssClass("FitUiControlTreeViewLines");me.RemoveCssClass("FitUiControlTreeViewDotLines")}repaint()}return me.HasCssClass("FitUiControlTreeViewLines")};this.ContextMenu=function(contextMenu){Fit.Validation.ExpectInstance(contextMenu,Fit.Controls.ContextMenu,true);if(contextMenu!==undefined){ctx=contextMenu}return ctx};this.Clear=function(preserveNonSelectable){if(selected.length===0)return;forceClear=preserveNonSelectable!==true;var sel=Fit.Array.Copy(selected);executeWithNoOnChange(function(){Fit.Array.ForEach(sel,function(node){if(preserveNonSelectable!==true||node.Selectable()===true)node.Selected(false)})});forceClear=false;me._internal.FireOnChange()};this.AddChild=function(node,atIndex){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Validation.ExpectInteger(atIndex,true);rootNode.AddChild(node,atIndex)};this.RemoveChild=function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);rootNode.RemoveChild(node)};this.RemoveAllChildren=function(dispose){Fit.Validation.ExpectBoolean(dispose,true);var fireOnChange=selected.length>0;selected=createInternalCollection();executeWithNoOnChange(function(){var children=rootNode.GetChildren();Fit.Array.ForEach(children,function(child){if(dispose===true)child.Dispose();else rootNode.RemoveChild(child)})});if(fireOnChange===true)me._internal.FireOnChange()};this.GetChild=function(val,recursive){Fit.Validation.ExpectString(val);Fit.Validation.ExpectBoolean(recursive,true);return rootNode.GetChild(val,recursive)};this.GetChildren=function(){return rootNode.GetChildren()};this.GetAllNodes=function(){var nodes=[];executeRecursively(rootNode,function(n){if(n===rootNode)return;Fit.Array.Add(nodes,n)});return nodes};this.GetNodeFocused=function(){return getNodeFocused()};this.GetActiveNode=function(){return isPicker?activeNode:getNodeFocused()};this.SetActiveNode=function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(node.GetTreeView()===me){focusNode(node)}};this.GetNodeAbove=function(node){return getNodeAbove(node,true)};this.GetNodeBelow=function(node){return getNodeBelow(node,true,true)};this.KeyboardNavigation=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){keyNavigationEnabled=val}return keyNavigationEnabled};this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(calledInternally){Fit.Validation.ExpectBoolean(calledInternally,true);if(focusInEventId!==-1){Fit.Events.RemoveHandler(document,focusInEventId)}me._internal.ExecuteWithNoOnChange(function(){rootNode.Dispose()});if(ctx!==null){ctx.Dispose()}base();if(calledInternally!==true){me.Destroy(true)}me=rootContainer=rootNode=focusInEventId=keyNavigationEnabled=selectable=multiSelect=showSelectAll=allowDeselect=revealExpandedNodes=persistView=scrollPosition=highlightFirst=firstWasHighlighted=selected=selectedOrg=ctx=onSelectHandlers=onSelectedHandlers=onToggleHandlers=onToggledHandlers=onSelectAllHandlers=onSelectAllCompleteHandlers=onContextMenuHandlers=forceClear=isIe8=isPicker=activeNode=hostFocused=null});this.OnSelect=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSelectHandlers,cb)};this.OnSelected=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSelectedHandlers,cb)};this.OnToggle=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onToggleHandlers,cb)};this.OnToggled=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onToggledHandlers,cb)};this.OnSelectAll=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSelectAllHandlers,cb)};this.OnSelectAllComplete=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onSelectAllCompleteHandlers,cb)};this.OnContextMenu=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onContextMenuHandlers,cb)};var isPicker=false;var activeNode=null;var hostFocused=false;this.OnShow(function(sender){if(persistView===false){if(highlightFirst===true){focusFirstNode()}else{unsetActiveNode()}me.GetDomElement().scrollTop=0;me.GetDomElement().scrollLeft=0}else{if(highlightFirst===true&&firstWasHighlighted===false){focusFirstNode();firstWasHighlighted=true}me.GetDomElement().scrollTop=scrollPosition.Y;me.GetDomElement().scrollLeft=scrollPosition.X}});this.OnSelect(function(sender,node){return me._internal.FireOnItemSelectionChanging(node.Title(),node.Value(),node.Selected(),hostFocused===false)});this.OnSelected(function(sender,node){me._internal.FireOnItemSelectionChanged(node.Title(),node.Value(),node.Selected(),hostFocused===false)});this.OnChange(function(sender){me._internal.FireOnItemSelectionComplete()});this.OnFocus(function(sender){me._internal.FireOnFocusIn()});this.OnBlur(function(sender){me._internal.FireOnFocusOut()});this.SetSelections=function(items){Fit.Validation.ExpectArray(items);var vals=[];var fireOnChange=false;Fit.Array.ForEach(items,function(item){Fit.Array.Add(vals,item.Value)});executeWithNoOnChange(function(){Fit.Array.ForEach(Fit.Array.Copy(selected),function(selectedNode){if(Fit.Array.Contains(vals,selectedNode.Value())===false&&selectedNode.Selectable()===true){selectedNode.Selected(false);fireOnChange=true}});Fit.Array.ForEach(vals,function(nodeVal){var child=me.GetChild(nodeVal,true);if(child!==null&&child.Selected()===false){child.Selected(true);fireOnChange=true}})});if(fireOnChange===true)me._internal.FireOnChange()};this.GetItemByValue=function(val){Fit.Validation.ExpectString(val);var node=me.GetChild(val,true);if(node!==null){return{Title:node.Title(),Value:node.Value()}}return null};this.RevealItemInView=function(val){Fit.Validation.ExpectString(val);var node=me.GetChild(val,true);if(node!==null){if(revealExpandedNodes===false){revealExpandedNodes=true;var parent=node;while((parent=parent.GetParent())!==null){parent.Expanded(true)}}focusNode(node)}};this.GetHighlighted=function(){if(isNodeSet(activeNode)===true){return{Title:activeNode.Title(),Value:activeNode.Value()}}return null};this.PersistView=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true&&val!==persistView){persistView=val;scrollPosition.X=0;scrollPosition.Y=0}return persistView};this.HighlightFirst=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val!==highlightFirst){highlightFirst=val;firstWasHighlighted=false}if(val===true&&Fit.Dom.IsVisible(me.GetDomElement())===true){focusFirstNode();firstWasHighlighted=true}}return highlightFirst};this.UpdateItemSelection=function(itemValue,selected,programmaticallyChanged){Fit.Validation.ExpectString(itemValue);Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectBoolean(programmaticallyChanged);var node=me.GetChild(itemValue,true);if(node!==null&&node.Selected()!==selected){if(node.Selectable()===false)return false;node.Selected(selected);if(node.Selected()!==selected)return false}};this._internal=this._internal?this._internal:{};this._internal.InitializePicker=function(){isPicker=true;me._internal.Data("picker","true")};this._internal.ReportFocused=function(focused){Fit.Validation.ExpectBoolean(focused);hostFocused=focused};this._internal.FireOnSelectAll=function(selected,node){Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode,true);return fireEventHandlers(onSelectAllHandlers,{Selected:selected,Node:node||null})};this._internal.FireOnSelectAllComplete=function(selected,node){Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode,true);fireEventHandlers(onSelectAllCompleteHandlers,{Selected:selected,Node:node||null})};this._internal.FocusFirstNode=function(){if(Fit.Dom.IsVisible(me.GetDomElement())===true){focusFirstNode();firstWasHighlighted=true}};this.HandleEvent=function(e){Fit.Validation.ExpectEvent(e,true);var ev=Fit.Events.GetEvent(e);if(ev.type==="keydown"){rootNode.GetDomElement().onkeydown(e);if(ev.keyCode===37||ev.keyCode===39)return false;if(ev.keyCode===32)return false}};this.Destroy=Fit.Core.CreateOverride(this.Destroy,function(calledInternally){Fit.Validation.ExpectBoolean(calledInternally,true);if(calledInternally!==true){me.Dispose(true)}base()});function executeWithNoOnChange(cb){Fit.Validation.ExpectFunction(cb);me._internal.ExecuteWithNoOnChange(cb)}function executeRecursively(node,cb){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Validation.ExpectFunction(cb);if(cb(node)===false)return false;Fit.Array.ForEach(node.GetChildren(),function(child){if(executeRecursively(child,cb)===false)return false})}function createInternalCollection(){var selected=[];return selected}function repaint(){if(isIe8===true){me.AddCssClass("FitUi_Non_Existing_TreeView_Class");me.RemoveCssClass("FitUi_Non_Existing_TreeView_Class")}}function toggleNodeSelection(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(node.Selected()===true&&allowDeselect===false)return;node.Selected(!node.Selected())}function focusNode(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(Fit.Dom.IsVisible(node.GetDomElement())===false){if(isPicker===true){nodeIsVisibleInHierarchy=true;var parent=node;while((parent=parent.GetParent())!==null){if(parent.Expanded()===false){nodeIsVisibleInHierarchy=false;break}}if(nodeIsVisibleInHierarchy===true){if(isNodeSet(activeNode)===true){Fit.Dom.Data(activeNode.GetDomElement(),"active",null)}activeNode=node;Fit.Dom.Data(activeNode.GetDomElement(),"active","true")}}return}if(isPicker===true){if(isNodeSet(activeNode)===true)Fit.Dom.Data(activeNode.GetDomElement(),"active",null);activeNode=node;Fit.Dom.Data(activeNode.GetDomElement(),"active","true");var nodePositionWithinControl={X:activeNode.GetDomElement().offsetLeft,Y:activeNode.GetDomElement().offsetTop};var offsetParent=activeNode.GetDomElement().offsetParent;while(offsetParent!==me.GetDomElement()){nodePositionWithinControl.X+=offsetParent.offsetLeft;nodePositionWithinControl.Y+=offsetParent.offsetTop;offsetParent=offsetParent.offsetParent}var nodeHeightWithoutChildren=-1;var childrenContainer=activeNode.GetChildren().length>0?activeNode.GetChildren()[0].GetDomElement().parentElement:null;if(childrenContainer!==null)childrenContainer.style.display="none";nodeHeightWithoutChildren=activeNode.GetDomElement().offsetHeight;if(childrenContainer!==null)childrenContainer.style.display="";if(nodePositionWithinControl.Y>me.GetDomElement().scrollTop+me.GetDomElement().clientHeight-nodeHeightWithoutChildren||nodePositionWithinControl.Y<me.GetDomElement().scrollTop)me.GetDomElement().scrollTop=Math.ceil(nodePositionWithinControl.Y-me.GetDomElement().clientHeight/2);if(activeNode.GetLevel()>2)me.GetDomElement().scrollLeft=Math.ceil(nodePositionWithinControl.X);else me.GetDomElement().scrollLeft=0;repaint()}else{node.Focused(true)}}function focusFirstNode(){if(rootNode.GetChildren().length>0){focusNode(rootNode.GetChildren()[0])}}function unsetActiveNode(){if(isNodeSet(activeNode)===true){Fit.Dom.Data(activeNode.GetDomElement(),"active",null);activeNode=null}}function isNodeSet(node){return node!==null&&node.GetDomElement()!==null}function getNodeFocused(){return Fit.Dom.GetFocused()&&Fit.Dom.GetFocused().tagName==="LI"&&Fit.Dom.GetFocused()._internal&&Fit.Dom.Contained(rootContainer,Fit.Dom.GetFocused())===true?Fit.Dom.GetFocused()._internal.Node:null}function getNodeAbove(node,noLastOnExpand){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Validation.ExpectBoolean(noLastOnExpand,true);var parent=node.GetParent();parent=parent!==null?parent:rootNode;var children=parent.GetChildren();var idx=Fit.Array.GetIndex(children,node);var next=idx>0?children[idx-1]:null;if(noLastOnExpand===true)return next;if(next!==null){while(next.Expanded()===true){children=next.GetChildren();next=children[children.length-1]}}else{next=node.GetParent()}return next}function getNodeBelow(node,noFirstOnExpand,noSkipToParent){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Validation.ExpectBoolean(noFirstOnExpand,true);Fit.Validation.ExpectBoolean(noSkipToParent,true);if(node.Expanded()===true&&noFirstOnExpand!==true){var children=node.GetChildren();return children[0]}else{var parent=node.GetParent();parent=parent!==null?parent:rootNode;var children=parent.GetChildren();var idx=Fit.Array.GetIndex(children,node);var next=children.length-1>=idx+1?children[idx+1]:null;if(noSkipToParent===true||next!==null||node.GetParent()===null)return next;return getNodeBelow(parent,true)}}function openContextMenu(node,pos){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(ctx===null)return;if(fireEventHandlers(onContextMenuHandlers,node)===false)return;if(Fit.Validation.IsSet(pos)===true)ctx.Show(pos.X,pos.Y);else ctx.Show()}function fireEventHandlers(handlers,evObj){var cancel=false;Fit.Array.ForEach(handlers,function(cb){if(cb(me,evObj)===false)cancel=true});return!cancel}function decodeReserved(str){Fit.Validation.ExpectString(str);return str.replace(/%3B/g,";").replace(/%3D/g,"=")}function encodeReserved(str){Fit.Validation.ExpectString(str);return str.replace(/;/g,"%3B").replace(/=/g,"%3D")}init()};Fit.Controls.TreeViewNode=function(displayTitle,nodeValue,options){Fit.Validation.ExpectString(displayTitle);Fit.Validation.ExpectString(nodeValue);Fit.Validation.ExpectObject(options,true);Fit.Validation.ExpectBoolean((options||{}).HtmlAllowed,true);var me=this;var nodeTitle=null;var elmLi=null;var elmUl=null;var cmdToggle=null;var chkSelect=null;var lblTitle=null;var childrenIndexed={};var childrenArray=[];var lastChild=null;var behavioralNodeCallback=null;var htmlAllowed=options&&options.HtmlAllowed===true||false;function init(){elmLi=document.createElement("li");cmdToggle=document.createElement("div");lblTitle=document.createElement("span");me.Title(displayTitle);Fit.Dom.Data(elmLi,"value",encode(nodeValue));Fit.Dom.Data(elmLi,"state","static");Fit.Dom.Data(elmLi,"selectable","false");Fit.Dom.Data(elmLi,"selected","false");Fit.Dom.Data(elmLi,"last","false");elmLi.tabIndex=0;elmLi.appendChild(cmdToggle);elmLi.appendChild(lblTitle);elmLi._internal={Node:me,TreeView:null,TreeViewConfigOverrides:{Selectable:undefined,ShowCheckbox:undefined,ShowSelectAll:undefined}}}this.HtmlAllowed=function(val,recursive){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(recursive,true);if(Fit.Validation.IsSet(val)===true){htmlAllowed=val;me.Title(me.Title());if(recursive===true){Fit.Array.ForEach(childrenArray,function(child){child.HtmlAllowed(val,true)})}}return htmlAllowed};this.Title=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){nodeTitle=val;if(htmlAllowed===false){Fit.Dom.Text(lblTitle,Fit.String.StripHtml(val))}else{lblTitle.innerHTML=val;Fit.Array.ForEach(lblTitle.getElementsByTagName("a"),function(link){link.tabIndex=-1})}}return nodeTitle};this.Value=function(){return nodeValue};this.Expanded=function(expand){Fit.Validation.ExpectBoolean(expand,true);if(Fit.Validation.IsSet(expand)===true&&Fit.Dom.Data(elmLi,"state")!=="static"&&me.Expanded()!==expand){var tv=elmLi._internal.TreeView;if(tv!==null&&tv.FireToggle(me)===false)return Fit.Dom.Data(elmLi,"state")==="expanded";Fit.Dom.Data(elmLi,"state",expand===true?"expanded":"collapsed");if(tv!==null){tv.Repaint();tv.FireToggled(me)}}return Fit.Dom.Data(elmLi,"state")==="expanded"};this.SetBehavioralNodeCallback=function(func){Fit.Validation.ExpectFunction(func!==null?func:function(){});behavioralNodeCallback=func};this.IsBehavioralNode=function(){return behavioralNodeCallback!==null};this.Selectable=function(val,showCheckbox,showSelectAll){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(showCheckbox,true);Fit.Validation.ExpectBoolean(showSelectAll,true);if(Fit.Validation.IsSet(val)===true){elmLi._internal.TreeViewConfigOverrides.Selectable=val;elmLi._internal.TreeViewConfigOverrides.ShowCheckbox=showCheckbox;elmLi._internal.TreeViewConfigOverrides.ShowSelectAll=showSelectAll;Fit.Dom.Data(elmLi,"selectable",val.toString());if(showCheckbox===true&&chkSelect===null){chkSelect=document.createElement("input");chkSelect.type="checkbox";chkSelect.tabIndex="-1";chkSelect.checked=me.Selected();Fit.Dom.InsertBefore(lblTitle,chkSelect)}else if(showCheckbox===false&&chkSelect!==null){Fit.Dom.Remove(chkSelect);chkSelect=null}if(chkSelect!==null){chkSelect.disabled=val===false?true:false}}return Fit.Dom.Data(elmLi,"selectable")==="true"};this.HasCheckbox=function(){return chkSelect!==null};this.Selected=function(select,suppressOnChange){Fit.Validation.ExpectBoolean(select,true);if(Fit.Validation.IsSet(select)===true&&me.Selected()!==select){var tv=elmLi._internal.TreeView;if(behavioralNodeCallback!==null){if(behavioralNodeCallback(me,!me.Selected())===false){return Fit.Dom.Data(elmLi,"selected")==="true"}}if(behavioralNodeCallback===null){if(tv!==null&&tv.FireSelect(me)===false){return Fit.Dom.Data(elmLi,"selected")==="true"}}var wasSelected=me.Selected();Fit.Dom.Data(elmLi,"selected",select.toString());if(chkSelect!==null)chkSelect.checked=select;if(tv!==null)tv.Repaint();if(behavioralNodeCallback===null&&tv!==null){if(select===true&&wasSelected===false){tv.Select(me);tv.FireSelected(me);if(suppressOnChange!==true)tv.FireOnChange()}else if(select===false&&wasSelected===true){tv.Deselect(me);tv.FireSelected(me);if(suppressOnChange!==true)tv.FireOnChange()}}}return Fit.Dom.Data(elmLi,"selected")==="true"};this.Focused=function(val){Fit.Validation.ExpectBoolean(val,true);if(Fit.Validation.IsSet(val)===true){if(val===true){if(Fit.Dom.IsVisible(elmLi)===true){elmLi.focus()}}else if(Fit.Dom.GetFocused()===elmLi){elmLi.blur()}}return Fit.Dom.GetFocused()===elmLi};this.GetParent=function(){if(!elmLi.parentElement)return null;if(!elmLi.parentElement.parentElement._internal||!elmLi.parentElement.parentElement._internal.TreeView)return null;if(elmLi.parentElement.parentElement._internal.Node.Value()==="TREEVIEW_ROOT_NODE")return null;return elmLi.parentElement.parentElement._internal.Node};this.GetTreeView=function(){if(elmLi._internal.TreeView!==null)return elmLi._internal.TreeView.GetTreeView();return null};this.GetLevel=function(){var level=0;var node=me;while((node=node.GetParent())!==null){level++}return level};this.GetIndex=function(){if(me.GetTreeView()===null){return-1}return Fit.Dom.GetIndex(me.GetDomElement())};this.AddChild=function(node,atIndex){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Validation.ExpectInteger(atIndex,true);if(node.GetParent()!==null)node.GetParent().RemoveChild(node);if(node.GetTreeView()!==null)node.GetTreeView().RemoveChild(node);if(elmUl===null){elmUl=document.createElement("ul");elmLi.appendChild(elmUl);Fit.Dom.Data(elmLi,"state","collapsed")}if(Fit.Validation.IsSet(atIndex)===false||lastChild===null||atIndex>lastChild.GetIndex()){if(lastChild!==null)Fit.Dom.Data(lastChild.GetDomElement(),"last","false");Fit.Dom.Data(node.GetDomElement(),"last","true");lastChild=node}if(lastChild===node){elmUl.appendChild(node.GetDomElement());childrenIndexed[node.Value()]=node;Fit.Array.Add(childrenArray,node)}else{Fit.Dom.InsertAt(elmUl,atIndex,node.GetDomElement());childrenIndexed[node.Value()]=node;Fit.Array.Insert(childrenArray,atIndex,node)}if(elmLi._internal.TreeView!==null)elmLi._internal.TreeView.Repaint();if(node.IsBehavioralNode()===true){executeRecursively(node,function(n){n.GetDomElement()._internal.TreeView=elmLi._internal.TreeView});return}var tv=elmLi._internal.TreeView;if(tv!==null){var selected=[];var fireOnChange=false;executeRecursively(node,function(n){if(n.Selected()===true){Fit.Array.Add(selected,n);n.Selected(false)}n.GetDomElement()._internal.TreeView=tv;var ovr=n.GetDomElement()._internal.TreeViewConfigOverrides;n.Selectable(Fit.Validation.IsSet(ovr.Selectable)===true?ovr.Selectable:tv.IsSelectable(),Fit.Validation.IsSet(ovr.ShowCheckbox)===true?ovr.ShowCheckbox:tv.IsMultiSelect(),Fit.Validation.IsSet(ovr.ShowSelectAll)===true?ovr.ShowSelectAll:tv.ShowSelectAll())});Fit.Array.ForEach(selected,function(node){var wasSelected=node.Selected();var newSelection=node.Selected(true,true);if(wasSelected!==newSelection){fireOnChange=true}});if(fireOnChange===true)tv.FireOnChange()}};this.RemoveChild=function(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);if(node.GetParent()===me||me.Value()==="TREEVIEW_ROOT_NODE"&&me.GetTreeView().GetChild(node.Value())!==null){var tv=node.GetDomElement()._internal.TreeView;if(tv!==null){var fireOnChange=false;executeRecursively(node,function(n){if(n.Selected()===true){tv.Deselect(n);fireOnChange=true}n.GetDomElement()._internal.TreeView=null});tv.Dissociate(node);if(fireOnChange===true)tv.FireOnChange()}elmUl.removeChild(node.GetDomElement());delete childrenIndexed[node.Value()];Fit.Array.Remove(childrenArray,node);if(childrenArray.length===0){elmLi.removeChild(elmUl);elmUl=null;Fit.Dom.Data(elmLi,"state","static")}if(node===lastChild){lastChild=null;Fit.Dom.Data(node.GetDomElement(),"last","false");if(childrenArray.length>0){lastChild=childrenArray[childrenArray.length-1];Fit.Dom.Data(lastChild.GetDomElement(),"last","true")}}if(elmLi._internal.TreeView!==null)elmLi._internal.TreeView.Repaint()}};this.GetChild=function(val,recursive){Fit.Validation.ExpectString(val);Fit.Validation.ExpectBoolean(recursive,true);var node=childrenIndexed[val];if(node===undefined&&recursive===true){var found=null;Fit.Array.ForEach(childrenArray,function(child){found=child.GetChild(val,recursive);if(found!==null)return false});return found}return node!==undefined?node:null};this.GetChildren=function(){return Fit.Array.Copy(childrenArray)};this.Dispose=function(){Fit.Array.ForEach(Fit.Array.Copy(childrenArray),function(child){child.Dispose()});var parentNode=me.GetParent();if(parentNode!==null){parentNode.RemoveChild(me)}else{if(me.GetTreeView()!==null){me.GetTreeView().RemoveChild(me)}else{Fit.Dom.Remove(elmLi)}}me=nodeTitle=elmLi=elmUl=cmdToggle=chkSelect=lblTitle=childrenIndexed=childrenArray=lastChild=behavioralNodeCallback=htmlAllowed=null};this.GetDomElement=function(){return elmLi};function executeRecursively(node,cb){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Validation.ExpectFunction(cb);if(cb(node)===false)return false;Fit.Array.ForEach(node.GetChildren(),function(child){if(executeRecursively(child,cb)===false)return false})}function encode(str){Fit.Validation.ExpectString(str);return encodeURIComponent(str)}init()};Fit.Controls.TreeView.Node=Fit.Controls.TreeViewNode;Fit.Controls.WSTreeView=function(ctlId){Fit.Validation.ExpectStringValue(ctlId,true);Fit.Core.Extend(this,Fit.Controls.TreeView).Apply(ctlId);var me=this;var url=null;var jsonpCallback=null;var rootNode=null;var preSelected={};var orgSelected=[];var loadDataOnInit=true;var dataLoading=false;var dataReloading=false;var dataReloadingEnableFunc=null;var nodesLoading=0;var recursiveNodeLoadCount=-1;var onDataLoadedCallback=[];var selectAllMode=Fit.Controls.WSTreeViewSelectAllMode.Progressively;var onRequestHandlers=[];var onResponseHandlers=[];var onAbortHandlers=[];var onPopulatedHandlers=[];var baseSelected=this.Selected;var expandCollapseAllMode=-1;var expandCollapseAllMaxDepth=99999;function init(){rootNode=me.GetDomElement().firstChild.firstChild._internal.Node;rootNode.GetDomElement()._internal.WSHasChildren=true;var rootedEventId=-1;rootedEventId=Fit.Events.AddHandler(me.GetDomElement(),"#rooted",function(elm){if(loadDataOnInit===true){me.Reload(true)}Fit.Events.RemoveHandler(me.GetDomElement(),rootedEventId)});me.OnToggle(function(sender,node){if(node.IsBehavioralNode()===true)return;if(node.Expanded()===true)return;if(dataReloading===true&&node.GetDomElement()._internal.WSHasChildren===true&&node.GetDomElement()._internal.WSDone!==true){return false}if(dataLoading===true&&node.GetDomElement()._internal.WSHasChildren===true&&node.GetDomElement()._internal.WSDone!==true){onDataLoaded(function(){node.Expanded(true)});return false}if(node.GetDomElement()._internal.WSLoading===true){return false}var dataStartedLoading=loadNodeData(node,function(nodePopulated){nodesLoading--;if(nodeDisposedOrDetached(node)===false){delete node.GetDomElement()._internal.WSLoading;node.Expanded(true)}if(nodesLoading===0){fireOnDataLoadedToResumeProcessQueue()}});if(dataStartedLoading===true){nodesLoading++;node.GetDomElement()._internal.WSLoading=true;return false}if(dataStartedLoading===false&&node.GetDomElement()._internal.WSHasChildren===true&&node.GetChildren().length===1&&node.GetChildren()[0].Value()==="__"&&node.GetChildren()[0].Title()==="__"){return false}});me.OnSelectAll(function(sender,eventArgs){if(selectAllMode===Fit.Controls.WSTreeViewSelectAllMode.Progressively)return;var node=eventArgs.Node!==null?eventArgs.Node:rootNode;var internal=node.GetDomElement()._internal;if(nodeFullyLoaded(node)===true)return;internal.WSSelectAll=true;internal.WSCheckedState=eventArgs.Selected;if(node===rootNode){setTimeout(function(){me.Reload(true)},0)}else{delete internal.WSDone;delete internal.WSLoading;node.Expanded(false);setTimeout(function(){node.Expanded(true)},0)}return false});me.OnResponse(function(sender,eventArgs){if(selectAllMode===Fit.Controls.WSTreeViewSelectAllMode.Progressively)return;var node=eventArgs.Node!==null?eventArgs.Node:rootNode;if(eventArgs.SelectAll===true){me._internal.ExecuteWithNoOnChange(function(){Fit.Array.Recurse(node.GetChildren(),"GetChildren",function(n){n.Selected(false)});Fit.Array.ForEach(node.GetChildren(),function(child){node.RemoveChild(child)})})}});me.OnPopulated(function(sender,eventArgs){if(selectAllMode===Fit.Controls.WSTreeViewSelectAllMode.Progressively)return;var node=eventArgs.Node!==null?eventArgs.Node:rootNode;var selected=node.GetDomElement()._internal.WSCheckedState;if(eventArgs.SelectAll===true){var changed=false;me._internal.ExecuteWithNoOnChange(function(){if(node!==rootNode&&node.Selectable()===true&&node.Selected()!==selected){node.Selected(selected);changed=true}Fit.Array.Recurse(node.GetChildren(),"GetChildren",function(child){var childInternal=child.GetDomElement()._internal;if(childInternal.WSHasChildren===true&&childInternal.WSDone!==true){Fit.Browser.Log("NOTICE: WebService did not provide all data in one single HTTP request - an additional request is required to load data for node with value '"+child.Value()+"'");childInternal.WSSelectAll=true;childInternal.WSCheckedState=selected}if(child.Selectable()===true&&child.Selected()!==selected){child.Selected(selected);changed=true}child.Expanded(true)})});if(changed===true)me._internal.FireOnChange()}});me.OnPopulated(function(sender,eventArgs){if(expandCollapseAllMode===-1)return;var node=eventArgs.Node;if(node===null)return;if(node.GetLevel()+1<expandCollapseAllMaxDepth){expandCollapseNodesRecursively(node.GetChildren(),expandCollapseAllMode,expandCollapseAllMaxDepth)}})}this.Url=function(wsUrl){Fit.Validation.ExpectString(wsUrl,true);if(Fit.Validation.IsSet(wsUrl)===true){url=wsUrl}return url};this.JsonpCallback=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true||val===null){jsonpCallback=val}return jsonpCallback};this.SelectAllMode=function(val){Fit.Validation.ExpectString(val,true);if(Fit.Validation.IsSet(val)===true){if(val===Fit.Controls.WSTreeViewSelectAllMode.Progressively||val===Fit.Controls.WSTreeViewSelectAllMode.Instantly)selectAllMode=val}return selectAllMode};this.SelectAll=Fit.Core.CreateOverride(this.SelectAll,function(select,selectAllNode){Fit.Validation.ExpectBoolean(select);Fit.Validation.ExpectInstance(selectAllNode,Fit.Controls.TreeViewNode,true);if(selectAllMode===Fit.Controls.WSTreeViewSelectAllMode.Instantly){base(select,selectAllNode);return}if(dataLoading===true||nodesLoading>0){onDataLoaded(function(){me.SelectAll(select,selectAllNode)});return}var internal=(selectAllNode||rootNode).GetDomElement()._internal;internal.WSSelectAll=true;var baseSelectAll=base;var exec=function(){dataLoading=true;recursivelyLoadAllNodes(selectAllNode||null,function(){dataLoading=false;fireOnDataLoadedToResumeProcessQueue();setTimeout(function(){baseSelectAll(select,selectAllNode)},0)})};if(loadDataOnInit===true){me.Reload(true,function(sender){exec()})}else{exec()}});this.RemoveAllChildren=Fit.Core.CreateOverride(this.RemoveAllChildren,function(dispose){Fit.Validation.ExpectBoolean(dispose,true);preSelected={};base(dispose)});this.Selectable=Fit.Core.CreateOverride(this.Selectable,function(val,multi,showSelAll){Fit.Validation.ExpectBoolean(val,true);Fit.Validation.ExpectBoolean(multi,true);Fit.Validation.ExpectBoolean(showSelAll,true);if(Fit.Validation.IsSet(val)===true){if(Fit.Array.Count(preSelected)>0){Fit.Browser.Debug("WSTreeView: Selectable changed - PreSelections will be cleared")}preSelected={}}return base(val,multi,showSelAll)});this.Clear=Fit.Core.CreateOverride(this.Clear,function(){var fireChange=me.Selected().length>0;preSelected={};me._internal.ExecuteWithNoOnChange(function(){base()});if(fireChange===true)me._internal.FireOnChange()});this.Reload=function(a,b){var keepState=undefined;var cb=undefined;if(typeof a==="boolean"){keepState=a;cb=b}else if(typeof a==="function"){keepState=b;cb=a;Fit.Browser.Log("WARNING: Using deprecated function signature for WSTreeView.Reload(callback) which will be removed in the future - please use Reload(boolean, callback) instead")}Fit.Validation.ExpectBoolean(keepState,true);Fit.Validation.ExpectFunction(cb,true);if(me.Enabled()===true&&dataReloadingEnableFunc===null){dataReloadingEnableFunc=me._internal.DisableAndKeepFocus();dataReloading=true}if(dataLoading===true||nodesLoading>0){onDataLoaded(function(){me.Reload(keepState,cb)});return}dataLoading=true;dataReloading=true;getData(null,keepState===true,function(node,eventArgs){var expanded={};if(keepState===true){Fit.Array.ForEach(me.GetAllNodes(),function(node){if(node.Expanded()===true){expanded[node.Value()]=true}})}var focusedNode=keepState===true&&me.GetNodeFocused()!==null?me.GetNodeFocused().Value():null;var highlightedNode=keepState===true&&me.GetHighlighted()!==null?me.GetHighlighted().Value:null;var selected=me.Selected();var newPreselection={};if(keepState===true){Fit.Array.ForEach(selected,function(node){newPreselection[node.Value()]=createPreSelectionNode(node.Title(),node.Value())})}else{me.Clear()}var scrollbars=Fit.Dom.GetScrollBars(me.GetDomElement());var scrollParent=scrollbars.Vertical.Enabled===true||scrollbars.Horizontal.Enabled===true?me.GetDomElement():Fit.Dom.GetScrollParent(me.GetDomElement());var scrollPositionToRestore=scrollParent!==null&&keepState===true?{Top:scrollParent.scrollTop,Left:scrollParent.scrollLeft}:null;me._internal.ExecuteWithNoOnChange(function(){me.RemoveAllChildren(true)});preSelected=newPreselection;if(keepState===true){Fit.Array.Recurse(eventArgs.Children,"Children",function(jsonChild){if(jsonChild.HasChildren===true){return}jsonChild.Expanded=expanded[jsonChild.Value]===true})}Fit.Array.ForEach(eventArgs.Children,function(jsonChild){me.AddChild(createNodeFromJson(jsonChild))});if(dataReloadingEnableFunc!==null){dataReloadingEnableFunc();dataReloadingEnableFunc=null}if(focusedNode!==null&&me.Focused()===true){var nodeToFocus=me.GetChild(focusedNode,true);if(nodeToFocus!==null){nodeToFocus.Focused(true)}}else if(highlightedNode!==null){var nodeToActivate=me.GetChild(highlightedNode,true);if(nodeToActivate!==null){me.SetActiveNode(nodeToActivate)}}if(scrollPositionToRestore!==null){scrollParent.scrollTop=scrollPositionToRestore.Top;scrollParent.scrollLeft=scrollPositionToRestore.Left}dataLoading=false;dataReloading=false;rootNode.GetDomElement()._internal.WSDone=true;fireOnDataLoadedToResumeProcessQueue();if(Fit.Validation.IsSet(cb)===true){setTimeout(function(){cb(me)},0)}});loadDataOnInit=false};this.EnsureData=function(cb){Fit.Validation.ExpectFunction(cb,true);if(dataLoading===true||nodesLoading>0){onDataLoaded(function(){me.EnsureData(cb)});return}var exec=function(){dataLoading=true;recursivelyLoadAllNodes(null,function(){dataLoading=false;fireOnDataLoadedToResumeProcessQueue();if(Fit.Validation.IsSet(cb)===true){setTimeout(function(){cb(me)},0)}})};if(me.GetChildren().length===0){me.Reload(true,function(sender){exec()})}else{exec()}};this.ExpandAll=function(maxDepth){Fit.Validation.ExpectInteger(maxDepth,true);setExpandedStateForAllNodes(1,maxDepth)};this.CollapseAll=function(maxDepth){Fit.Validation.ExpectInteger(maxDepth,true);setExpandedStateForAllNodes(0,maxDepth)};this.Value=Fit.Core.CreateOverride(this.Value,function(val,preserveDirtyState){Fit.Validation.ExpectString(val,true);Fit.Validation.ExpectBoolean(preserveDirtyState,true);if(Fit.Validation.IsSet(val)===true){orgSelected=preserveDirtyState!==true?[]:orgSelected;preSelected={};var fireOnChange=me.Selected().length>0;me._internal.ExecuteWithNoOnChange(function(){base(val);var selected=baseSelected();if(selected.length>0)fireOnChange=true;if(preserveDirtyState!==true){Fit.Array.ForEach(selected,function(node){Fit.Array.Add(orgSelected,node.Value())})}var values=val!==""?val.split(";"):[];Fit.Array.ForEach(values,function(nodeVal){var info=nodeVal.split("=");var preSel={Title:null,Value:null};if(info.length===1){preSel.Title="[pre-selection]";preSel.Value=decodeReserved(info[0])}else{preSel.Title=decodeReserved(info[0]);preSel.Value=decodeReserved(info[1])}if(me.GetChild(preSel.Value,true)===null){preSelected[preSel.Value]=createPreSelectionNode(preSel.Title,preSel.Value);if(preserveDirtyState!==true){Fit.Array.Add(orgSelected,preSel.Value)}fireOnChange=true}})});if(fireOnChange===true)me._internal.FireOnChange()}var nodes=me.Selected();var value="";Fit.Array.ForEach(nodes,function(node){value+=(value!==""?";":"")+encodeReserved(node.Title())+"="+encodeReserved(node.Value())});return value});this.SetNodeSelection=function(value,selected){Fit.Validation.ExpectString(value);Fit.Validation.ExpectBoolean(selected);var node=me.GetChild(value,true);if(node!==null){node.Selected(selected)}else{if(selected===true&&preSelected[value]===undefined){preSelected[value]=createPreSelectionNode("[pre-selection]",value);me._internal.FireOnChange()}else if(selected===false&&preSelected[value]!==undefined){delete preSelected[value];me._internal.FireOnChange()}}};this.Selected=function(val){Fit.Validation.ExpectInstanceArray(val,Fit.Controls.TreeViewNode,true);if(Fit.Validation.IsSet(val)===true){var toSelect=[];Fit.Array.ForEach(val,function(n){var node=n.GetTreeView()===me?n:me.GetChild(n.Value(),true);if(node!==null)Fit.Array.Add(toSelect,node)});orgSelected=[];preSelected={};var fireOnChange=me.Selected().length>0;var selected=null;me._internal.ExecuteWithNoOnChange(function(){selected=baseSelected(toSelect)});if(selected.length>0)fireOnChange=true;Fit.Array.ForEach(selected,function(node){Fit.Array.Add(orgSelected,node.Value())});Fit.Array.ForEach(val,function(node){if(me.GetChild(node.Value(),true)===null){preSelected[node.Value()]=createPreSelectionNode(node.Title(),node.Value());Fit.Array.Add(orgSelected,node.Value());fireOnChange=true}});if(fireOnChange===true){me._internal.FireOnChange()}}var nodes=baseSelected();Fit.Array.ForEach(preSelected,function(preSelVal){Fit.Array.Add(nodes,preSelected[preSelVal])});return nodes};this.IsDirty=Fit.Core.CreateOverride(this.IsDirty,function(){var valuesSelected=[];Fit.Array.ForEach(me.Selected(),function(selected){Fit.Array.Add(valuesSelected,selected.Value())});if(valuesSelected.length!==orgSelected.length)return true;var dirty=false;Fit.Array.ForEach(orgSelected,function(val){if(Fit.Array.Contains(valuesSelected,val)===false){dirty=true;return false}});return dirty});this.Dispose=Fit.Core.CreateOverride(this.Dispose,function(){me=url=jsonpCallback=preSelected=orgSelected=loadDataOnInit=dataLoading=dataReloading=dataReloadingEnableFunc=nodesLoading=recursiveNodeLoadCount=onDataLoadedCallback=onRequestHandlers=onResponseHandlers=onPopulatedHandlers=baseSelected=expandCollapseAllMode=expandCollapseAllMaxDepth=null;base()});this.SetSelections=Fit.Core.CreateOverride(this.SetSelections,function(items){Fit.Validation.ExpectArray(items);var fireOnChange=me.Selected().length>0;preSelected={};me._internal.ExecuteWithNoOnChange(function(){base(items)});if(me.Selected().length>0)fireOnChange=true;Fit.Array.ForEach(items,function(item){Fit.Validation.ExpectString(item.Title);Fit.Validation.ExpectString(item.Value);preSelected[item.Value]=createPreSelectionNode(item.Title,item.Value)});Fit.Array.ForEach(baseSelected(),function(selected){delete preSelected[selected.Value()]});if(Fit.Core.IsEqual(preSelected,{})===false)fireOnChange=true;if(fireOnChange===true)me._internal.FireOnChange()});this.UpdateItemSelection=Fit.Core.CreateOverride(this.UpdateItemSelection,function(itemValue,selected,programmaticallyChanged){Fit.Validation.ExpectString(itemValue);Fit.Validation.ExpectBoolean(selected);Fit.Validation.ExpectBoolean(programmaticallyChanged);if(me.GetChild(itemValue,true)===null){if(selected===true&&preSelected[itemValue]===undefined){preSelected[itemValue]=createPreSelectionNode("[pre-selection]",itemValue);me._internal.FireOnChange()}else if(selected===false&&preSelected[itemValue]!==undefined){delete preSelected[itemValue];me._internal.FireOnChange()}}else{if(base(itemValue,selected,programmaticallyChanged)===false)return false}});this.OnRequest=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onRequestHandlers,cb)};this.OnResponse=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onResponseHandlers,cb)};this.OnAbort=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onAbortHandlers,cb)};this.OnPopulated=function(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onPopulatedHandlers,cb)};function getData(node,forcePersist,cb){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode,true);Fit.Validation.ExpectBoolean(forcePersist);Fit.Validation.ExpectFunction(cb);if(url===null)Fit.Validation.ThrowError("Unable to get data, no WebService URL has been specified");var request=null;if(jsonpCallback!==null){request=new Fit.Http.JsonpRequest(url,jsonpCallback)}else{request=new Fit.Http.JsonRequest(url)}var eventArgs={Sender:null,Node:null,Request:null,Children:null};eventArgs.Sender=me;eventArgs.Node=node;eventArgs.Request=request;eventArgs.SelectAll=(node||rootNode).GetDomElement()._internal.WSSelectAll===true;if(fireEventHandlers(onRequestHandlers,eventArgs)===false)return false;if(eventArgs.Request!==request){Fit.Validation.ExpectInstance(eventArgs.Request,Fit.Http.Request);request=eventArgs.Request}var onSuccess=function(children){if(me===null)return;eventArgs.Children=children instanceof Array?children:[];fireEventHandlers(onResponseHandlers,eventArgs);cb(node,eventArgs);if(request._loadingIndicator!==undefined){Fit.Dom.Remove(request._loadingIndicator);delete request._loadingIndicator}if(node===null){if(me.PersistView()===true&&forcePersist===false){me.PersistView(false);me.PersistView(true)}if(me.HighlightFirst()===true){me.HighlightFirst(false);me.HighlightFirst(true);me._internal.FocusFirstNode()}}var hasBeenDisposedOrDetached=node!==null&&nodeDisposedOrDetached(node);if(hasBeenDisposedOrDetached===false&&Fit.Core.IsEqual(preSelected,{})===false){me._internal.ExecuteWithNoOnChange(function(){Fit.Array.Recurse(node!==null?node.GetChildren():me.GetChildren(),"GetChildren",function(n){if(preSelected[n.Value()]!==undefined){delete preSelected[n.Value()];n.Selected(true)}})})}if(hasBeenDisposedOrDetached===false){fireEventHandlers(onPopulatedHandlers,eventArgs)}};var onFailure=function(httpStatusCode){if(me===null)return;Fit.Validation.ThrowError("Unable to get children for "+(node!==null?"node '"+node.Title()+"'":"root level")+" - request failed with HTTP Status code "+httpStatusCode)};var onAbort=function(){if(me===null)return;if(request._loadingIndicator!==undefined){Fit.Dom.Remove(request._loadingIndicator);delete request._loadingIndicator}if(node!==null){if(nodeDisposedOrDetached(node)===false){delete node.GetDomElement()._internal.WSLoading}}fireEventHandlers(onAbortHandlers,eventArgs)};if(Fit.Core.InstanceOf(request,Fit.Http.JsonpRequest)===false){request.OnSuccess(function(req){var children=request.GetResponseJson();onSuccess(children)});request.OnFailure(function(req){onFailure(request.GetHttpStatus())});request.OnAbort(function(req){onAbort()})}else{request.OnSuccess(function(req){var children=req.GetResponse();onSuccess(children)});request.OnTimeout(function(){onFailure("UNKNOWN (JSONP)")})}if(node!==null){var li=node.GetDomElement();request._loadingIndicator=document.createElement("i");Fit.Dom.AddClass(request._loadingIndicator,"FitUiControlLoadingIndicator");Fit.Dom.Add(li,request._loadingIndicator)}request.Start();return true}function onDataLoaded(cb){Fit.Validation.ExpectFunction(cb);Fit.Array.Add(onDataLoadedCallback,cb)}function fireOnDataLoadedToResumeProcessQueue(){var orgOnDataLoadedCallback=onDataLoadedCallback;onDataLoadedCallback=[];Fit.Array.ForEach(orgOnDataLoadedCallback,function(cb){cb()})}function createNodeFromJson(jsonNode){Fit.Validation.ExpectIsSet(jsonNode);var child=new Fit.Controls.TreeViewNode(jsonNode.Title?jsonNode.Title:jsonNode.Value,jsonNode.Value,{HtmlAllowed:me.HtmlAllowed()});if(jsonNode.Selectable!==undefined)child.Selectable(jsonNode.Selectable===true);if(jsonNode.Selected!==undefined)child.Selected(jsonNode.Selected===true);if(jsonNode.Children instanceof Array){Fit.Array.ForEach(jsonNode.Children,function(c){child.AddChild(createNodeFromJson(c))})}if(jsonNode.Expanded!==undefined)child.Expanded(jsonNode.Expanded===true);child.GetDomElement()._internal.WSHasChildren=jsonNode.HasChildren===true;if(jsonNode.HasChildren===true&&child.GetChildren().length===0){var expanderNode=new Fit.Controls.TreeViewNode("__","__");expanderNode.Selectable(false);child.AddChild(expanderNode)}child.Supplementary={};var reserved=new Array("Title","Value","Children","HasChildren","Selected","Selectable","Expanded");Fit.Array.ForEach(jsonNode,function(key){if(Fit.Array.Contains(reserved,key)===false)child.Supplementary[key]=jsonNode[key]});return child}function createPreSelectionNode(title,value){Fit.Validation.ExpectString(title);Fit.Validation.ExpectString(value);var node=new Fit.Controls.TreeViewNode(title,value);node.Selectable(true);node.Selected(true);return node}function nodeFullyLoaded(node){var internal=node.GetDomElement()._internal;if(internal.WSSelectAll===true)return true;var parent=node.GetParent();while(parent!==null){if(parent.GetDomElement()._internal.WSSelectAll===true)return true;parent=parent.GetParent()}var fullyLoaded=true;Fit.Array.Recurse([node],"GetChildren",function(child){var childInternal=child.GetDomElement()._internal;if(childInternal.WSHasChildren===true&&childInternal.WSDone!==true){fullyLoaded=false;return false}});return fullyLoaded}function nodeDisposedOrDetached(node){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);return node.GetDomElement()===null||node.GetTreeView()!==me}function loadNodeData(node,cb){Fit.Validation.ExpectInstance(node,Fit.Controls.TreeViewNode);Fit.Validation.ExpectFunction(cb,true);if(node.GetDomElement()._internal.WSDone===true){return false}if(node.GetDomElement()._internal.WSHasChildren===false){return false}var canceled=!getData(node,false,function(n,eventArgs){if(nodeDisposedOrDetached(node)===false){var expanderNode=node.GetChild("__");if(expanderNode!==null){node.RemoveChild(expanderNode)}Fit.Array.ForEach(eventArgs.Children,function(c){node.AddChild(createNodeFromJson(c))});node.GetDomElement()._internal.WSDone=true}if(Fit.Validation.IsSet(cb)===true){cb(node)}});return canceled===false}function recursivelyLoadAllNodes(targetNode,cbComplete,cbProgress,isSubCall){Fit.Validation.ExpectInstance(targetNode,Fit.Controls.TreeViewNode,true);Fit.Validation.ExpectFunction(cbComplete,true);Fit.Validation.ExpectFunction(cbProgress,true);Fit.Validation.ExpectBoolean(isSubCall,true);if(isSubCall!==true){recursiveNodeLoadCount=0}var targetNodeInternal=(targetNode||rootNode).GetDomElement()._internal;var nodes=null;if(targetNode===null){nodes=me.GetChildren()}else{nodes=targetNode.GetChildren()}var anythingToLoad=false;Fit.Array.ForEach(nodes,function(node){if(node.IsBehavioralNode()===true)return;if(targetNodeInternal.WSSelectAll===true)node.GetDomElement()._internal.WSSelectAll=true;var dataStartedLoading=loadNodeData(node,function(n){var hasBeenDisposed=nodeDisposedOrDetached(node);if(hasBeenDisposed===false&&Fit.Validation.IsSet(cbProgress)===true){cbProgress(node)}recursiveNodeLoadCount--;if(hasBeenDisposed===false){recursivelyLoadAllNodes(node,cbComplete,cbProgress,true)}if(recursiveNodeLoadCount===0){if(Fit.Validation.IsSet(cbComplete)===true){cbComplete()}}});if(dataStartedLoading===true){anythingToLoad=true;recursiveNodeLoadCount++}else{if(Fit.Validation.IsSet(cbProgress)===true){cbProgress(node)}if(recursivelyLoadAllNodes(node,cbComplete,cbProgress,true)===true){anythingToLoad=true}}});if(isSubCall!==true&&anythingToLoad===false&&Fit.Validation.IsSet(cbComplete)===true){cbComplete()}return anythingToLoad}function setExpandedStateForAllNodes(expandMode,maxDepth){Fit.Validation.ExpectInteger(expandMode);Fit.Validation.ExpectInteger(maxDepth,true);if(dataLoading===true||nodesLoading>0){onDataLoaded(function(){setExpandedStateForAllNodes(expandMode,maxDepth)});return}expandCollapseAllMode=-1;expandCollapseAllMaxDepth=99999;if(Fit.Validation.IsSet(maxDepth)===true){if(maxDepth<1)return;expandCollapseAllMaxDepth=maxDepth}expandCollapseAllMode=expandMode;if(loadDataOnInit===true&&expandCollapseAllMode===1){me.Reload(true,function(sender){expandCollapseNodesRecursively(me.GetChildren(),expandCollapseAllMode,expandCollapseAllMaxDepth)})}else{expandCollapseNodesRecursively(me.GetChildren(),expandCollapseAllMode,expandCollapseAllMaxDepth)}}function expandCollapseNodesRecursively(nodes,expandCollapseMode,maxDepth){Fit.Validation.ExpectInstanceArray(nodes,Fit.Controls.TreeViewNode);Fit.Validation.ExpectInteger(expandCollapseMode);Fit.Validation.ExpectInteger(maxDepth);Fit.Array.CustomRecurse(nodes,function(node){if(expandCollapseMode===1)node.Expanded(true);else if(expandCollapseMode===0)node.Expanded(false);return node.GetLevel()+1<maxDepth?node.GetChildren():null})}function fireEventHandlers(handlers,eventArgs){var cancel=false;Fit.Array.ForEach(handlers,function(cb){if(cb(me,eventArgs)===false)cancel=true});return!cancel}function decodeReserved(str){Fit.Validation.ExpectString(str);return str.replace(/%3B/g,";").replace(/%3D/g,"=")}function encodeReserved(str){Fit.Validation.ExpectString(str);return str.replace(/;/g,"%3B").replace(/=/g,"%3D")}init()};Fit.Controls.WSTreeViewSelectAllMode={Progressively:"Progressively",Instantly:"Instantly"};Fit.Controls.WSTreeView.SelectAllMode=Fit.Controls.WSTreeViewSelectAllMode;Fit.Validation.Enabled(false);return Fit}();return fitInstance});