var ASPx = {}; (function () { ASPx.EmptyObject = { }; ASPx.FalseFunction = function() { return false; } ASPx.SSLSecureBlankUrl = '/DXR.axd?r=1_0-5XLcs'; ASPx.EmptyImageUrl = '/DXR.axd?r=1_57-5XLcs'; ASPx.VersionInfo = 'Version=\'16.1.18.0\', File Version=\'16.1.18.0\', Date Modified=\'2024/1/30 1:22:17\''; ASPx.InvalidDimension = -10000; ASPx.InvalidPosition = -10000; ASPx.AbsoluteLeftPosition = -10000; ASPx.EmptyGuid = "00000000-0000-0000-0000-000000000000"; ASPx.CallbackSeparator = ":"; ASPx.ItemIndexSeparator = "i"; ASPx.CallbackResultPrefix = "/*DX*/"; ASPx.AccessibilityEmptyUrl = "javascript:;"; ASPx.AccessibilityPronounceTimeout = 500; ASPx.PossibleNumberDecimalSeparators = [",", "."]; ASPx.CultureInfo = { twoDigitYearMax: 2029, ts: ":", ds: "/", am: "AM", pm: "PM", monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""], genMonthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""], abbrMonthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""], abbrDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], numDecimalPoint: ".", numPrec: 2, numGroupSeparator: ",", numGroups: [ 3 ], numNegPattern: 1, numPosInf: "Infinity", numNegInf: "-Infinity", numNan: "NaN", currency: "$", currDecimalPoint: ".", currPrec: 2, currGroupSeparator: ",", currGroups: [ 3 ], currPosPattern: 0, currNegPattern: 0, percentPattern: 0, shortTime: "h:mm tt", longTime: "h:mm:ss tt", shortDate: "M/d/yyyy", longDate: "dddd, MMMM d, yyyy", monthDay: "MMMM d", yearMonth: "MMMM yyyy" }; ASPx.CultureInfo.genMonthNames = ASPx.CultureInfo.monthNames; ASPx.Position = { Left: "Left", Right: "Right", Top: "Top", Bottom: "Bottom" }; var DateUtils = { }; DateUtils.GetInvariantDateString = function(date) { if(!date) return "01/01/0001"; var day = date.getDate(); var month = date.getMonth() + 1; var year = date.getFullYear(); var result = ""; if(month < 10) result += "0"; result += month.toString() + "/"; if(day < 10) result += "0"; result += day.toString() + "/"; if(year < 1000) result += "0"; result += year.toString(); return result; } DateUtils.GetInvariantDateTimeString = function(date) { var dateTimeString = DateUtils.GetInvariantDateString(date); var time = { h: date.getHours(), m: date.getMinutes(), s: date.getSeconds() }; for(var key in time) { var str = time[key].toString(); if(str.length < 2) str = "0" + str; time[key] = str; } dateTimeString += " " + time.h + ":" + time.m + ":" + time.s; var msec = date.getMilliseconds(); if(msec > 0) dateTimeString += "." + ("000" + msec.toString()).substr(-3); return dateTimeString; } DateUtils.ExpandTwoDigitYear = function(value) { value += 1900; if(value + 99 < ASPx.CultureInfo.twoDigitYearMax) value += 100; return value; } DateUtils.ToUtcTime = function(date) { var result = new Date(); result.setTime(date.valueOf() + 60000 * date.getTimezoneOffset()); return result; } DateUtils.ToLocalTime = function(date) { var result = new Date(); result.setTime(date.valueOf() - 60000 * date.getTimezoneOffset()); return result; } DateUtils.AreDatesEqualExact = function(date1, date2) { if(date1 == null && date2 == null) return true; if(date1 == null || date2 == null) return false; return date1.getTime() == date2.getTime(); } DateUtils.FixTimezoneGap = function(oldDate, newDate) { var diff = newDate.getHours() - oldDate.getHours(); if(diff == 0) return; var sign = (diff == 1 || diff == -23) ? -1 : 1; var trial = new Date(newDate.getTime() + sign * 3600000); if(sign > 0 || trial.getDate() == newDate.getDate()) newDate.setTime(trial.getTime()); } ASPx.DateUtils = DateUtils; var Timer = { }; Timer.ClearTimer = function(timerID){ if(timerID > -1) window.clearTimeout(timerID); return -1; } Timer.ClearInterval = function(timerID){ if(timerID > -1) window.clearInterval(timerID); return -1; } var setControlBoundTimer = function(handler, control, setTimerFunction, clearTimerFunction, delay) { var timerId; var getTimerId = function() { return timerId }; var boundHandler = function() { var controlExists = control && ASPx.GetControlCollection().Get(control.name) === control; if(controlExists) handler.aspxBind(control)(); else clearTimerFunction(getTimerId()); } timerId = setTimerFunction(boundHandler, delay); return timerId; } Timer.SetControlBoundTimeout = function(handler, control, delay) { return setControlBoundTimer(handler, control, window.setTimeout, Timer.ClearTimer, delay); } Timer.SetControlBoundInterval = function(handler, control, delay) { return setControlBoundTimer(handler, control, window.setInterval, Timer.ClearInterval, delay); } Timer.Throttle = function(func, delay) { var isThrottled = false, savedArgs, savedThis = this; function wrapper() { if(isThrottled) { savedArgs = arguments; savedThis = this; return; } func.apply(this, arguments); isThrottled = true; setTimeout(function() { isThrottled = false; if(savedArgs) { wrapper.apply(savedThis, savedArgs); savedArgs = null; } }, delay); } wrapper.cancel = function() { clearTimeout(delay); delay = savedArgs = savedThis = null; }; return wrapper; } ASPx.Timer = Timer; var Browser = { }; Browser.UserAgent = navigator.userAgent.toLowerCase(); Browser.Mozilla = false; Browser.IE = false; Browser.Firefox = false; Browser.Netscape = false; Browser.Safari = false; Browser.Chrome = false; Browser.Opera = false; Browser.Edge = false; Browser.Version = undefined; Browser.MajorVersion = undefined; Browser.WindowsPlatform = false; Browser.MacOSPlatform = false; Browser.MacOSMobilePlatform = false; Browser.AndroidMobilePlatform = false; Browser.PlaformMajorVersion = false; Browser.WindowsPhonePlatform = false; Browser.AndroidDefaultBrowser = false; Browser.AndroidChromeBrowser = false; Browser.SamsungAndroidDevice = false; Browser.WebKitTouchUI = false; Browser.MSTouchUI = false; Browser.TouchUI = false; Browser.WebKitFamily = false; Browser.NetscapeFamily = false; Browser.HardwareAcceleration = false; Browser.VirtualKeyboardSupported = false; Browser.Info = ""; function indentPlatformMajorVersion(userAgent) { var regex = /(?:(?:windows nt|macintosh|mac os|cpu os|cpu iphone os|android|windows phone|linux) )(\d+)(?:[-0-9_.])*/; var matches = regex.exec(userAgent); if(matches) Browser.PlaformMajorVersion = matches[1]; } function getIECompatibleVersionString() { if(document.compatible) { for(var i = 0; i < document.compatible.length; i++) if(document.compatible[i].userAgent === "IE" && document.compatible[i].version) return document.compatible[i].version.toLowerCase(); } return ""; } Browser.IdentUserAgent = function(userAgent, ignoreDocumentMode) { var browserTypesOrderedList = [ "Mozilla", "IE", "Firefox", "Netscape", "Safari", "Chrome", "Opera", "Opera10", "Edge" ]; var defaultBrowserType = "IE"; var defaultPlatform = "Win"; var defaultVersions = { Safari: 2, Chrome: 0.1, Mozilla: 1.9, Netscape: 8, Firefox: 2, Opera: 9, IE: 6, Edge: 12 }; if(!userAgent || userAgent.length == 0) { fillUserAgentInfo(browserTypesOrderedList, defaultBrowserType, defaultVersions[defaultBrowserType], defaultPlatform); return; } userAgent = userAgent.toLowerCase(); indentPlatformMajorVersion(userAgent); try { var platformIdentStrings = { "Windows": "Win", "Macintosh": "Mac", "Mac OS": "Mac", "Mac_PowerPC": "Mac", "cpu os": "MacMobile", "cpu iphone os": "MacMobile", "Android": "Android", "!Windows Phone": "WinPhone", "!WPDesktop": "WinPhone", "!ZuneWP": "WinPhone" }; var optSlashOrSpace = "(?:/|\\s*)?"; var version = "(\\d+)(?:\\.((?:\\d+?[1-9])|\\d)0*?)?"; var optVersion = "(?:" + version + ")?"; var patterns = { Safari: "applewebkit(?:.*?(?:version/" + version + "[\\.\\w\\d]*?(?:\\s+mobile\/\\S*)?\\s+safari))?", Chrome: "(?:chrome|crios)(?!frame)" + optSlashOrSpace + optVersion, Mozilla: "mozilla(?:.*rv:" + optVersion + ".*Gecko)?", Netscape: "(?:netscape|navigator)\\d*/?\\s*" + optVersion, Firefox: "firefox" + optSlashOrSpace + optVersion, Opera: "(?:opera|opr)" + optSlashOrSpace + optVersion, Opera10: "opera.*\\s*version" + optSlashOrSpace + optVersion, IE: "msie\\s*" + optVersion, Edge: "edge" + optSlashOrSpace + optVersion }; var browserType; var version = -1; for(var i = 0; i < browserTypesOrderedList.length; i++) { var browserTypeCandidate = browserTypesOrderedList[i]; var regExp = new RegExp(patterns[browserTypeCandidate], "i"); if(regExp.compile) regExp.compile(patterns[browserTypeCandidate], "i"); var matches = regExp.exec(userAgent); if(matches && matches.index >= 0) { if(browserType == "IE" && version >= 11 && browserTypeCandidate == "Safari") continue; browserType = browserTypeCandidate; if(browserType == "Opera10") browserType = "Opera"; var tridentPattern = "trident" + optSlashOrSpace + optVersion; version = Browser.GetBrowserVersion(userAgent, matches, tridentPattern, getIECompatibleVersionString()); if(browserType == "Mozilla" && version >= 11) browserType = "IE"; } } if(!browserType) browserType = defaultBrowserType; var browserVersionDetected = version != -1; if(!browserVersionDetected) version = defaultVersions[browserType]; var platform; var minOccurenceIndex = Number.MAX_VALUE; for(var identStr in platformIdentStrings) { if(!platformIdentStrings.hasOwnProperty(identStr)) continue; var importantIdent = identStr.substr(0,1) == "!"; var occurenceIndex = userAgent.indexOf((importantIdent ? identStr.substr(1) : identStr).toLowerCase()); if(occurenceIndex >= 0 && (occurenceIndex < minOccurenceIndex || importantIdent)) { minOccurenceIndex = importantIdent ? 0 : occurenceIndex; platform = platformIdentStrings[identStr]; } } var samsungPattern = "SM-[A-Z]"; var matches = userAgent.toUpperCase().match(samsungPattern); var isSamsungAndroidDevice = matches && matches.length > 0; if(platform == "WinPhone" && version < 9) version = Math.floor(getVersionFromTrident(userAgent, "trident" + optSlashOrSpace + optVersion)); if(!ignoreDocumentMode && browserType == "IE" && version > 7 && document.documentMode < version) version = document.documentMode; if(platform == "WinPhone") version = Math.max(9, version); if(!platform) platform = defaultPlatform; if(platform == platformIdentStrings["cpu os"] && !browserVersionDetected) version = 4; fillUserAgentInfo(browserTypesOrderedList, browserType, version, platform, isSamsungAndroidDevice); } catch(e) { fillUserAgentInfo(browserTypesOrderedList, defaultBrowserType, defaultVersions[defaultBrowserType], defaultPlatform); } } function getVersionFromMatches(matches) { var result = -1; var versionStr = ""; if(matches[1]) { versionStr += matches[1]; if(matches[2]) versionStr += "." + matches[2]; } if(versionStr != "") { result = parseFloat(versionStr); if(result == NaN) result = -1; } return result; } function getVersionFromTrident(userAgent, tridentPattern) { var tridentDiffFromVersion = 4; var matches = new RegExp(tridentPattern, "i").exec(userAgent); return getVersionFromMatches(matches) + tridentDiffFromVersion; } Browser.GetBrowserVersion = function(userAgent, matches, tridentPattern, ieCompatibleVersionString) { var version = getVersionFromMatches(matches); if(ieCompatibleVersionString) { var versionFromTrident = getVersionFromTrident(userAgent, tridentPattern); if(ieCompatibleVersionString === "edge" || parseInt(ieCompatibleVersionString) === versionFromTrident) return versionFromTrident; } return version; } function fillUserAgentInfo(browserTypesOrderedList, browserType, version, platform, isSamsungAndroidDevice) { for(var i = 0; i < browserTypesOrderedList.length; i++) { var type = browserTypesOrderedList[i]; Browser[type] = type == browserType; } Browser.Version = Math.floor(10.0 * version) / 10.0; Browser.MajorVersion = Math.floor(Browser.Version); Browser.WindowsPlatform = platform == "Win" || platform == "WinPhone"; Browser.MacOSPlatform = platform == "Mac"; Browser.MacOSMobilePlatform = platform == "MacMobile"; Browser.AndroidMobilePlatform = platform == "Android"; Browser.WindowsPhonePlatform = platform == "WinPhone"; Browser.WebKitFamily = Browser.Safari || Browser.Chrome || Browser.Opera && Browser.MajorVersion >= 15; Browser.NetscapeFamily = Browser.Netscape || Browser.Mozilla || Browser.Firefox; Browser.HardwareAcceleration = (Browser.IE && Browser.MajorVersion >= 9) || (Browser.Firefox && Browser.MajorVersion >= 4) || (Browser.AndroidMobilePlatform && Browser.Chrome) || (Browser.Chrome && Browser.MajorVersion >= 37) || (Browser.Safari && !Browser.WindowsPlatform) || Browser.Edge; Browser.WebKitTouchUI = Browser.MacOSMobilePlatform || Browser.AndroidMobilePlatform; var isIETouchUI = Browser.IE && Browser.MajorVersion > 9 && Browser.WindowsPlatform && Browser.UserAgent.toLowerCase().indexOf("touch") >= 0; Browser.MSTouchUI = isIETouchUI || (Browser.Edge && !!window.navigator.maxTouchPoints); Browser.TouchUI = Browser.WebKitTouchUI || Browser.MSTouchUI; Browser.MobileUI = Browser.WebKitTouchUI || Browser.WindowsPhonePlatform; Browser.AndroidDefaultBrowser = Browser.AndroidMobilePlatform && !Browser.Chrome; Browser.AndroidChromeBrowser = Browser.AndroidMobilePlatform && Browser.Chrome; if(isSamsungAndroidDevice) Browser.SamsungAndroidDevice = isSamsungAndroidDevice; if(Browser.MSTouchUI) { var isARMArchitecture = Browser.UserAgent.toLowerCase().indexOf("arm;") > -1; Browser.VirtualKeyboardSupported = isARMArchitecture || Browser.WindowsPhonePlatform; } else { Browser.VirtualKeyboardSupported = Browser.WebKitTouchUI; } fillDocumentElementBrowserTypeClassNames(browserTypesOrderedList); } function fillDocumentElementBrowserTypeClassNames(browserTypesOrderedList) { var documentElementClassName = ""; var browserTypeslist = browserTypesOrderedList.concat(["WindowsPlatform", "MacOSPlatform", "MacOSMobilePlatform", "AndroidMobilePlatform", "WindowsPhonePlatform", "WebKitFamily", "WebKitTouchUI", "MSTouchUI", "TouchUI", "AndroidDefaultBrowser"]); for(var i = 0; i < browserTypeslist.length; i++) { var type = browserTypeslist[i]; if(Browser[type]) documentElementClassName += "dx" + type + " "; } documentElementClassName += "dxBrowserVersion-" + Browser.MajorVersion if(document && document.documentElement) { if(document.documentElement.className != "") documentElementClassName = " " + documentElementClassName; document.documentElement.className += documentElementClassName; Browser.Info = documentElementClassName; } } Browser.IdentUserAgent(Browser.UserAgent); ASPx.Browser = Browser; ASPx.BlankUrl = Browser.IE ? ASPx.SSLSecureBlankUrl : (Browser.Opera ? "about:blank" : ""); var Data = { }; Data.ArrayInsert = function(array, element, position){ if(0 <= position && position < array.length){ for(var i = array.length; i > position; i --) array[i] = array[i - 1]; array[position] = element; } else array.push(element); } Data.ArrayRemove = function(array, element){ var index = Data.ArrayIndexOf(array, element); if(index > -1) Data.ArrayRemoveAt(array, index); } Data.ArrayRemoveAt = function(array, index){ if(index >= 0 && index < array.length){ for(var i = index; i < array.length - 1; i++) array[i] = array[i + 1]; array.pop(); } } Data.ArrayClear = function(array){ while(array.length > 0) array.pop(); } Data.ArrayIndexOf = function(array, element, comparer) { if(!comparer) { for(var i = 0; i < array.length; i++) { if(array[i] == element) return i; } } else { for(var i = 0; i < array.length; i++) { if(comparer(array[i], element)) return i; } } return -1; } Data.ArrayContains = function(array, element) { return Data.ArrayIndexOf(array, element) >= 0; } Data.ArrayEqual = function(array1, array2) { var count1 = array1.length; var count2 = array2.length; if(count1 != count2) return false; for(var i = 0; i < count1; i++) if(array1[i] != array2[i]) return false; return true; } Data.ArrayGetIntegerEdgeValues = function(array) { var arrayToSort = Data.CollectionToArray(array); Data.ArrayIntegerAscendingSort(arrayToSort); return { start: arrayToSort[0], end: arrayToSort[arrayToSort.length - 1] } } Data.ArrayIntegerAscendingSort = function(array){ Data.ArrayIntegerSort(array); } Data.ArrayIntegerSort = function(array, desc) { array.sort(function(i1, i2) { var res = 0; if(i1 > i2) res = 1; else if(i1 < i2) res = -1; if(desc) res *= -1; return res; }); }, Data.CollectionsUnionToArray = function(firstCollection, secondCollection) { var result = []; var firstCollectionLength = firstCollection.length; var secondCollectionLength = secondCollection.length; for(var i = 0; i < firstCollectionLength + secondCollectionLength; i++) { if(i < firstCollectionLength) result.push(firstCollection[i]); else result.push(secondCollection[i - firstCollectionLength]); } return result; } Data.CollectionToArray = function(collection) { var array = []; for(var i = 0; i < collection.length; i++) array.push(collection[i]); return array; } Data.CreateHashTableFromArray = function(array) { var hash = []; for(var i = 0; i < array.length; i++) hash[array[i]] = 1; return hash; } Data.CreateIndexHashTableFromArray = function(array) { var hash = []; for(var i = 0; i < array.length; i++) hash[array[i]] = i; return hash; } var defaultBinarySearchComparer = function(array, index, value) { var arrayElement = array[index]; if(arrayElement == value) return 0; else return arrayElement < value ? -1 : 1; }; Data.NearestLeftBinarySearchComparer = function(array, index, value) { var arrayElement = array[index]; var leftPoint = arrayElement < value; var lastLeftPoint = leftPoint && index == array.length - 1; var nearestLeftPoint = lastLeftPoint || (leftPoint && array[index + 1] >= value) if(nearestLeftPoint) return 0; else return arrayElement < value ? -1 : 1; }; Data.ArrayBinarySearch = function(array, value, binarySearchComparer, startIndex, length) { if(!binarySearchComparer) binarySearchComparer = defaultBinarySearchComparer; if(!ASPx.IsExists(startIndex)) startIndex = 0; if(!ASPx.IsExists(length)) length = array.length - startIndex; var endIndex = (startIndex + length) - 1; while(startIndex <= endIndex) { var middle = (startIndex + ((endIndex - startIndex) >> 1)); var compareResult = binarySearchComparer(array, middle, value); if(compareResult == 0) return middle; if(compareResult < 0) startIndex = middle + 1; else endIndex = middle - 1; } return -(startIndex + 1); }, Data.ArrayFlattern = function(arrayOfArrays) { return [].concat.apply([], arrayOfArrays); }, Data.GetDistinctArray = function(array) { var resultArray = []; for(var i = 0; i < array.length; i++) { var currentEntry = array[i]; if(Data.ArrayIndexOf(resultArray, currentEntry) == -1) { resultArray.push(currentEntry); } } return resultArray; } Data.ForEach = function(arr, callback) { if(Array.prototype.forEach) { Array.prototype.forEach.call(arr, callback); } else { for(var i = 0, len = arr.length; i < len; i++) { callback(arr[i], i, arr); } } }, Data.MergeHashTables = function(target, object) { if(!object || typeof (object) == "string") return target; if(!target) target = {}; for(var key in object) if(key && !(key in target)) target[key] = object[key]; return target; } ASPx.Data = Data; var Cookie = { }; Cookie.DelCookie = function(name){ setCookieInternal(name, "", new Date(1970, 1, 1)); } Cookie.GetCookie = function(name) { name = escape(name); var cookies = document.cookie.split(';'); for(var i = 0; i < cookies.length; i++) { var cookie = Str.Trim(cookies[i]); if(cookie.indexOf(name + "=") == 0) return unescape(cookie.substring(name.length + 1, cookie.length)); else if(cookie.indexOf(name + ";") == 0 || cookie === name) return ""; } return null; } Cookie.SetCookie = function(name, value, expirationDate){ if(!ASPx.IsExists(value)) { Cookie.DelCookie(name); return; } if(!ASPx.Ident.IsDate(expirationDate)) { expirationDate = new Date(); expirationDate.setFullYear(expirationDate.getFullYear() + 1); } setCookieInternal(name, value, expirationDate); } function setCookieInternal(name, value, date){ document.cookie = escape(name) + "=" + escape(value.toString()) + "; expires=" + date.toGMTString() + "; path=/"; } ASPx.Cookie = Cookie; ASPx.ImageUtils = { GetImageSrc: function (image){ return image.src; }, SetImageSrc: function(image, src){ image.src = src; }, SetSize: function(image, width, height){ image.style.width = width + "px"; image.style.height = height + "px"; }, GetSize: function(image, isWidth){ return (isWidth ? image.offsetWidth : image.offsetHeight); } }; var Str = { }; Str.ApplyReplacement = function(text, replecementTable) { if(typeof(text) != "string") text = text.toString(); for(var i = 0; i < replecementTable.length; i++) { var replacement = replecementTable[i]; text = text.replace(replacement[0], replacement[1]); } return text; } Str.CompleteReplace = function(text, regexp, newSubStr) { if(typeof(text) != "string") text = text.toString(); var textPrev; do { textPrev = text; text = text.replace(regexp, newSubStr); } while(text != textPrev); return text; } Str.EncodeHtml = function(html) { return Str.ApplyReplacement(html, [ [ /&/g, '&x;' ], [ /&/g, '&' ], [ /"/g, '"x;' ], [ /"/g, '"' ], [ //g, '>x;' ], [ />/g, '>' ] ]); } Str.DecodeHtml = function(html) { return Str.ApplyReplacement(html, [ [ />/g, '>' ], [ />x;/g, '>' ], [ / 0 && whiteSpaces[source.charCodeAt(len - 1)]) { len--; } } if(trimStart && len > 0) { while(start < len && whiteSpaces[source.charCodeAt(start)]) { start++; } } return source.substring(start, len); } } Str.Insert = function(str, subStr, index) { var leftText = str.slice(0, index); var rightText = str.slice(index); return leftText + subStr + rightText; } Str.InsertEx = function(str, subStr, startIndex, endIndex) { var leftText = str.slice(0, startIndex); var rightText = str.slice(endIndex); return leftText + subStr + rightText; } var greekSLFSigmaChar = String.fromCharCode(962); var greekSLSigmaChar = String.fromCharCode(963); Str.PrepareStringForFilter = function(s){ s = s.toLowerCase(); if(ASPx.Browser.WebKitFamily) { return s.replace(new RegExp(greekSLFSigmaChar, "g"), greekSLSigmaChar); } return s; } Str.GetCoincideCharCount = function(text, filter, textMatchingDelegate) { var coincideText = ASPx.Str.PrepareStringForFilter(filter); var originText = ASPx.Str.PrepareStringForFilter(text); while(coincideText != "" && !textMatchingDelegate(originText, coincideText)) { coincideText = coincideText.slice(0, -1); } return coincideText.length; } ASPx.Str = Str; var Xml = { }; Xml.Parse = function(xmlStr) { if(window.DOMParser) { var parser = new DOMParser(); return parser.parseFromString(xmlStr, "text/xml"); } else if(window.ActiveXObject) { var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); if(xmlDoc) { xmlDoc.async = false; xmlDoc.loadXML(xmlStr); return xmlDoc; } } return null; } ASPx.Xml = Xml; ASPx.Key = { F1 : 112, F2 : 113, F3 : 114, F4 : 115, F5 : 116, F6 : 117, F7 : 118, F8 : 119, F9 : 120, F10 : 121, F11 : 122, F12 : 123, Ctrl : 17, Shift : 16, Alt : 18, Enter : 13, Home : 36, End : 35, Left : 37, Right : 39, Up : 38, Down : 40, PageUp : 33, PageDown : 34, Esc : 27, Space : 32, Tab : 9, Backspace : 8, Delete : 46, Insert : 45, ContextMenu : 93, Windows : 91, Decimal : 110 }; ASPx.KeyCode = { Backspace : 8, Tab : 9, Enter : 13, Pause : 19, CapsLock : 20, Esc : 27, Space : 32, PageUp : 33, PageDown : 34, End : 35, Home : 36, Left : 37, Up : 38, Right : 39, Down : 40, Insert : 45, Delete : 46, Key_0 : 48, Key_1 : 49, Key_2 : 50, Key_3 : 51, Key_4 : 52, Key_5 : 53, Key_6 : 54, Key_7 : 55, Key_8 : 56, Key_9 : 57, Key_a : 65, Key_b : 66, Key_c : 67, Key_d : 68, Key_e : 69, Key_f : 70, Key_g : 71, Key_h : 72, Key_i : 73, Key_j : 74, Key_k : 75, Key_l : 76, Key_m : 77, Key_n : 78, Key_o : 79, Key_p : 80, Key_q : 81, Key_r : 82, Key_s : 83, Key_t : 84, Key_u : 85, Key_v : 86, Key_w : 87, Key_x : 88, Key_y : 89, Key_z : 90, Windows : 91, ContextMenu : 93, Numpad_0 : 96, Numpad_1 : 97, Numpad_2 : 98, Numpad_3 : 99, Numpad_4 : 100, Numpad_5 : 101, Numpad_6 : 102, Numpad_7 : 103, Numpad_8 : 104, Numpad_9 : 105, Multiply : 106, Add : 107, Subtract : 109, Decimal : 110, Divide : 111, F1 : 112, F2 : 113, F3 : 114, F4 : 115, F5 : 116, F6 : 117, F7 : 118, F8 : 119, F9 : 120, F10 : 121, F11 : 122, F12 : 123, NumLock : 144, ScrollLock : 145, Semicolon : 186, Equals : 187, Comma : 188, Dash : 189, Period : 190, ForwardSlash : 191, GraveAccent : 192, OpenBracket : 219, BackSlash : 220, CloseBracket : 221, SingleQuote : 222 }; ASPx.ScrollBarMode = { Hidden: 0, Visible: 1, Auto: 2 }; ASPx.ColumnResizeMode = { None: 0, Control: 1, NextColumn: 2 }; var Selection = { }; Selection.Set = function(input, startPos, endPos, scrollToSelection) { if(!ASPx.IsExistsElement(input)) return; if(Browser.VirtualKeyboardSupported && (ASPx.GetActiveElement() !== input || ASPx.VirtualKeyboardUI.getInputNativeFocusLocked())) return; var textLen = input.value.length; startPos = ASPx.GetDefinedValue(startPos, 0); endPos = ASPx.GetDefinedValue(endPos, textLen); if(startPos < 0) startPos = 0; if(endPos < 0 || endPos > textLen) endPos = textLen; if(startPos > endPos) startPos = endPos; var makeReadOnly = false; if(Browser.WebKitFamily && input.readOnly) { input.readOnly = false; makeReadOnly = true; } try { if(Browser.Firefox && Browser.Version >= 8) input.setSelectionRange(startPos, endPos, "backward"); else if(Browser.IE && input.createTextRange) { var range = input.createTextRange(); range.collapse(true); range.moveStart("character", startPos); range.moveEnd("character", endPos - startPos); range.select(); } else { forceScrollToSelectionRange(input, startPos, endPos); input.setSelectionRange(startPos, endPos); } if(Browser.Opera || Browser.Firefox || Browser.Chrome) input.focus(); } catch(e) { } if(scrollToSelection && input.tagName == 'TEXTAREA') { var scrollHeight = input.scrollHeight; var approxCaretPos = startPos; var scrollTop = Math.max(Math.round(approxCaretPos * scrollHeight / textLen - input.clientHeight / 2), 0); input.scrollTop = scrollTop; } if(makeReadOnly) input.readOnly = true; } var getTextWidthBeforePos = function(input, pos) { return ASPx.GetSizeOfText(input.value.toString().substr(0, pos), ASPx.GetCurrentStyle(input)).width; } var forceScrollToSelectionRange = function(input, startPos, endPos) { var widthBeforeStartPos = getTextWidthBeforePos(input, startPos) - caretWidth; var widthBeforeEndPos = getTextWidthBeforePos(input, endPos) + caretWidth; var inputRawWidth = input.offsetWidth - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(input); if(input.scrollLeft < widthBeforeEndPos - inputRawWidth) input.scrollLeft = widthBeforeEndPos - inputRawWidth; else if(input.scrollLeft > widthBeforeStartPos) input.scrollLeft = widthBeforeStartPos; } Selection.GetInfo = function(input) { var start, end; if(Browser.IE && Browser.Version < 9) { var range = document.selection.createRange(); var rangeCopy = range.duplicate(); range.move('character', -input.value.length); range.setEndPoint('EndToStart', rangeCopy); start = range.text.length; end = start + rangeCopy.text.length; } else { try { start = input.selectionStart; end = input.selectionEnd; } catch (e) { } } return { startPos: start, endPos: end }; } Selection.GetExtInfo = function(input) { var start = 0, end = 0, textLen = 0; if(Browser.IE && Browser.Version < 9) { var normalizedValue; var range, textInputRange, textInputEndRange; range = document.selection.createRange(); if(range && range.parentElement() == input) { textLen = input.value.length; normalizedValue = input.value.replace(/\r\n/g, "\n"); textInputRange = input.createTextRange(); textInputRange.moveToBookmark(range.getBookmark()); textInputEndRange = input.createTextRange(); textInputEndRange.collapse(false); if(textInputRange.compareEndPoints("StartToEnd", textInputEndRange) > -1) { start = textLen; end = textLen; } else { start = normalizedValue.slice(0, start).split("\n").length - textInputRange.moveStart("character", -textLen) -1; if(textInputRange.compareEndPoints("EndToEnd", textInputEndRange) > -1) end = textLen; else end = normalizedValue.slice(0, end).split("\n").length - textInputRange.moveEnd("character", -textLen) - 1; } } return {startPos: start, endPos: end}; } try { start = input.selectionStart; end = input.selectionEnd; } catch (e) { } return {startPos: start, endPos: end}; } Selection.SetCaretPosition = function(input, caretPos) { if(typeof caretPos === "undefined" || caretPos < 0) caretPos = input.value.length; Selection.Set(input, caretPos, caretPos, true); } Selection.GetCaretPosition = function(element, isDialogMode) { var pos = 0; if("selectionStart" in element) { pos = element.selectionStart; } else if("selection" in document) { element.focus(); var sel = document.selection.createRange(), selLength = document.selection.createRange().text.length; sel.moveStart("character", -element.value.length); pos = sel.text.length - selLength; } if(isDialogMode && !pos) { pos = element.value.length - 1; } return pos; } Selection.Clear = function() { try { if(window.getSelection) { window.getSelection().removeAllRanges(); } else if(document.selection) { if(document.selection.empty) document.selection.empty(); else if(document.selection.clear) document.selection.clear(); } } catch(e) { } } Selection.ClearOnMouseMove = function(evt) { if(!Browser.IE || (evt.button != 0)) Selection.Clear(); } Selection.SetElementSelectionEnabled = function(element, value) { var userSelectValue = value ? "" : "none"; var func = value ? Evt.DetachEventFromElement : Evt.AttachEventToElement; if(Browser.Firefox) element.style.MozUserSelect = userSelectValue; else if(Browser.WebKitFamily) element.style.webkitUserSelect = userSelectValue; else if(Browser.Opera) func(element, "mousemove", Selection.Clear); else { func(element, "selectstart", ASPx.FalseFunction); func(element, "mousemove", Selection.Clear); } } Selection.SetElementAsUnselectable = function(element, isWithChild, recursive) { if(element && element.nodeType == 1) { element.unselectable = "on"; if(Browser.NetscapeFamily) element.onmousedown = ASPx.FalseFunction; if((Browser.IE && Browser.Version >= 9) || Browser.WebKitFamily) Evt.AttachEventToElement(element, "mousedown", Evt.PreventEventAndBubble); if(isWithChild === true){ for(var j = 0; j < element.childNodes.length; j ++) Selection.SetElementAsUnselectable(element.childNodes[j], (!!recursive ? true : false), (!!recursive)); } } } Selection.AreEqual = function(selection1, selection2) { return selection1.startPos === selection2.startPos && selection1.endPos === selection2.endPos; } ASPx.Selection = Selection; var MouseScroller = { }; MouseScroller.MinimumOffset = 10; MouseScroller.Create = function(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { var element = getElement(); if(!element) return; if(!element.dxMouseScroller) element.dxMouseScroller = new MouseScroller.Extender(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed); return element.dxMouseScroller; } MouseScroller.Extender = function(getElement, getScrollXElement, getScrollYElement, needPreventScrolling, vertRecursive, onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { this.getElement = getElement; this.getScrollXElement = getScrollXElement; this.getScrollYElement = getScrollYElement; this.needPreventScrolling = needPreventScrolling; this.vertRecursive = !!vertRecursive; this.createHandlers(onMouseDown || function() { }, onMouseMove || function() { }, onMouseUp || function() { }, onMouseUpMissed || function() { }); this.update() }; MouseScroller.Extender.prototype = { update: function() { if(this.element) Evt.DetachEventFromElement(this.element, ASPx.TouchUIHelper.touchMouseDownEventName, this.mouseDownHandler); this.element = this.getElement(); Evt.AttachEventToElement(this.element, ASPx.TouchUIHelper.touchMouseDownEventName, this.mouseDownHandler); Evt.AttachEventToElement(this.element, "click", this.mouseClickHandler); if(Browser.MSTouchUI && this.element.className.indexOf(ASPx.TouchUIHelper.msTouchDraggableClassName) < 0) this.element.className += " " + ASPx.TouchUIHelper.msTouchDraggableClassName; this.scrollXElement = this.getScrollXElement(); this.scrollYElement = this.getScrollYElement(); }, createHandlers: function(onMouseDown, onMouseMove, onMouseUp, onMouseUpMissed) { var mouseDownCounter = 0; this.onMouseDown = onMouseDown; this.onMouseMove = onMouseMove; this.onMouseUp = onMouseUp; this.mouseDownHandler = function(e) { if(mouseDownCounter++ > 0) { this.finishScrolling(); onMouseUpMissed(); } var eventSource = Evt.GetEventSource(e); var requirePreventCustonScroll = ASPx.IsExists(ASPx.TouchUIHelper.RequirePreventCustomScroll) && ASPx.TouchUIHelper.RequirePreventCustomScroll(eventSource, this.element); if(requirePreventCustonScroll || this.needPreventScrolling && this.needPreventScrolling(eventSource)) return; this.scrollableTreeLine = this.GetScrollableElements(); this.firstX = this.prevX = Evt.GetEventX(e); this.firstY = this.prevY = Evt.GetEventY(e); Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseMoveEventName, this.mouseMoveHandler); Evt.AttachEventToDocument(ASPx.TouchUIHelper.touchMouseUpEventName, this.mouseUpHandler); this.onMouseDown(e); }.aspxBind(this); this.mouseMoveHandler = function(e) { if(ASPx.TouchUIHelper.isGesture) return; var x = Evt.GetEventX(e); var y = Evt.GetEventY(e); var xDiff = this.prevX - x; var yDiff = this.prevY - y; if(this.vertRecursive) { var isTopDirection = yDiff < 0; this.scrollYElement = this.GetElementForVertScrolling(isTopDirection, this.prevIsTopDirection, this.scrollYElement); this.prevIsTopDirection = isTopDirection; } if(this.scrollXElement && xDiff != 0) this.scrollXElement.scrollLeft += xDiff; if(this.scrollYElement && yDiff != 0) { this.scrollYElement.scrollTop += yDiff; var isOuterScrollableElement = this.scrollableTreeLine[this.scrollableTreeLine.length - 1] == this.scrollYElement; if(isOuterScrollableElement) y += yDiff; } this.prevX = x; this.prevY = y; e.preventDefault(); this.onMouseMove(e); }.aspxBind(this); this.mouseUpHandler = function(e) { this.finishScrolling(); this.onMouseUp(e); }.aspxBind(this); this.mouseClickHandler = function(e){ if(this.needPreventScrolling && this.needPreventScrolling(Evt.GetEventSource(e))) return; var xDiff = this.firstX - Evt.GetEventX(e); var yDiff = this.firstY - Evt.GetEventY(e); if(xDiff > MouseScroller.MinimumOffset || yDiff > MouseScroller.MinimumOffset) return Evt.PreventEventAndBubble(e); }.aspxBind(this); this.finishScrolling = function() { Evt.DetachEventFromDocument(ASPx.TouchUIHelper.touchMouseMoveEventName, this.mouseMoveHandler); Evt.DetachEventFromDocument(ASPx.TouchUIHelper.touchMouseUpEventName, this.mouseUpHandler); this.scrollableTreeLine = []; this.prevIsTopDirection = null; mouseDownCounter--; }; }, GetScrollableElements: function() { var result = [ ]; var el = this.element; while(el && el != document && this.vertRecursive) { var outerScrollableElementTag = ASPx.Browser.IE ? "HTML" : "BODY"; if(this.CanVertScroll(el) || el.tagName == outerScrollableElementTag) result.push(el); el = el.parentNode; } return result; }, CanVertScroll: function(element) { var style = ASPx.GetCurrentStyle(element); return style.overflow == "scroll" || style.overflow == "auto" || style.overflowY == "scroll" || style.overflowY == "auto"; }, GetElementForVertScrolling: function(currentIsTop, prevIsTop, prevElement) { if(prevElement && currentIsTop === prevIsTop && this.GetVertScrollExcess(prevElement, currentIsTop) > 0) return prevElement; for(var i = 0; i < this.scrollableTreeLine.length; i++) { var element = this.scrollableTreeLine[i]; var excess = this.GetVertScrollExcess(element, currentIsTop); if(excess > 0) return element; } return null; }, GetVertScrollExcess: function(element, isTop) { if(isTop) return element.scrollTop; var isBodyElement = element.tagName == "BODY"; var clientHeight = isBodyElement ? ASPx.GetDocumentClientHeight() : element.clientHeight; return element.scrollHeight - clientHeight - element.scrollTop; } } ASPx.MouseScroller = MouseScroller; var Evt = { }; Evt.GetEvent = function(evt){ return (typeof(event) != "undefined" && event != null && Browser.IE) ? event : evt; } Evt.IsEventPrevented = function(evt) { return evt.defaultPrevented || evt.returnValue === false; } Evt.PreventEvent = function(evt){ if(evt.preventDefault) evt.preventDefault(); else evt.returnValue = false; return false; } Evt.PreventEventAndBubble = function(evt){ Evt.PreventEvent(evt); if(evt.stopPropagation) evt.stopPropagation(); evt.cancelBubble = true; return false; } Evt.CancelBubble = function(evt){ evt.cancelBubble = true; return false; } Evt.PreventImageDragging = function(image) { if(image) { if(Browser.NetscapeFamily) image.onmousedown = function(evt) { evt.cancelBubble = true; return false; }; else image.ondragstart = function() { return false; }; } } Evt.PreventDragStart = function(evt) { evt = Evt.GetEvent(evt); var element = Evt.GetEventSource(evt); if(element.releaseCapture) element.releaseCapture(); return false; } Evt.PreventElementDrag = function(element) { if(Browser.IE) Evt.AttachEventToElement(element, "dragstart", Evt.PreventEvent); else Evt.AttachEventToElement(element, "mousedown", Evt.PreventEvent); } Evt.PreventElementDragAndSelect = function(element, skipMouseMove, skipIESelect){ if(Browser.WebKitFamily) Evt.AttachEventToElement(element, "selectstart", Evt.PreventEventAndBubble); if(Browser.IE){ if(!skipIESelect) Evt.AttachEventToElement(element, "selectstart", ASPx.FalseFunction); if(!skipMouseMove) Evt.AttachEventToElement(element, "mousemove", Selection.ClearOnMouseMove); Evt.AttachEventToElement(element, "dragstart", Evt.PreventDragStart); } } Evt.GetEventSource = function(evt){ if(!ASPx.IsExists(evt)) return null; return evt.srcElement ? evt.srcElement : evt.target; } Evt.GetKeyCode = function(srcEvt) { return Browser.NetscapeFamily || Browser.Opera ? srcEvt.which : srcEvt.keyCode; } function clientEventRequiresDocScrollCorrection() { var isSafariVerLess3 = Browser.Safari && Browser.Version < 3, isMacOSMobileVerLess51 = Browser.MacOSMobilePlatform && Browser.Version < 5.1; return Browser.AndroidDefaultBrowser || Browser.AndroidChromeBrowser || !(isSafariVerLess3 || isMacOSMobileVerLess51); } Evt.GetEventX = function(evt){ if(ASPx.TouchUIHelper.isTouchEvent(evt)) return ASPx.TouchUIHelper.getEventX(evt); return evt.clientX + (clientEventRequiresDocScrollCorrection() ? ASPx.GetDocumentScrollLeft() : 0); } Evt.GetEventY = function(evt){ if(ASPx.TouchUIHelper.isTouchEvent(evt)) return ASPx.TouchUIHelper.getEventY(evt); return evt.clientY + (clientEventRequiresDocScrollCorrection() ? ASPx.GetDocumentScrollTop() : 0 ); } Evt.IsLeftButtonPressed = function(evt){ if(ASPx.TouchUIHelper.isTouchEvent(evt)) return true; evt = Evt.GetEvent(evt); if(!evt) return false; if(Browser.IE && Browser.Version < 11){ if(Browser.MSTouchUI) return true; return evt.button % 2 == 1; } else if(Browser.NetscapeFamily || Browser.WebKitFamily || (Browser.IE && Browser.Version >= 11) || Browser.Edge) { if(evt.type === "pointermove") return evt.buttons === 1; return evt.which == 1; } else if(Browser.Opera) return evt.button == 0; return true; } Evt.IsRightButtonPressed = function(evt){ evt = Evt.GetEvent(evt); if(!ASPx.IsExists(evt)) return false; if(Browser.IE || Browser.Edge) { if(evt.type === "pointermove") return evt.buttons === 2; return evt.button == 2; } else if(Browser.NetscapeFamily || Browser.WebKitFamily) return evt.which == 3; else if (Browser.Opera) return evt.button == 1; return true; } Evt.GetWheelDelta = function(evt){ var ret = Browser.NetscapeFamily ? -evt.detail : evt.wheelDelta; if(Browser.Opera && Browser.Version < 9) ret = -ret; return ret; } Evt.IsWheelEventWithDirection = function(evt) { return ASPx.Data.ArrayContains(["wheel", "mousewheel"], evt.type); } Evt.GetWheelDeltaX = function(evt) { if(evt.type === "wheel") return -evt.deltaX; if(evt.type === "mousewheel") return evt.wheelDeltaX; } Evt.GetWheelDeltaY = function(evt) { if(evt.type === "wheel") return -evt.deltaY; if(evt.type === "mousewheel") return evt.wheelDeltaY; } Evt.AttachEventToElement = function(element, eventName, func, onlyBubbling) { if(element.addEventListener) element.addEventListener(eventName, func, !onlyBubbling); else element.attachEvent("on" + eventName, func); } Evt.DetachEventFromElement = function(element, eventName, func) { if(element.removeEventListener) element.removeEventListener(eventName, func, true); else element.detachEvent("on" + eventName, func); } Evt.AttachEventToDocument = function(eventName, func) { var attachingAllowed = ASPx.TouchUIHelper.onEventAttachingToDocument(eventName, func); if(attachingAllowed) Evt.AttachEventToDocumentCore(eventName, func); } Evt.AttachEventToDocumentCore = function(eventName, func) { Evt.AttachEventToElement(document, eventName, func); } Evt.DetachEventFromDocument = function(eventName, func) { Evt.DetachEventFromDocumentCore(eventName, func); ASPx.TouchUIHelper.onEventDettachedFromDocument(eventName, func); } Evt.DetachEventFromDocumentCore = function(eventName, func){ Evt.DetachEventFromElement(document, eventName, func); } Evt.GetMouseWheelEventName = function(){ return Browser.NetscapeFamily ? "DOMMouseScroll" : "mousewheel"; } Evt.AttachMouseEnterToElement = function (element, onMouseOverHandler, onMouseOutHandler) { Evt.AttachEventToElement(element, ASPx.TouchUIHelper.pointerEnabled ? ASPx.TouchUIHelper.pointerOverEventName : "mouseover", function (evt) { mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler); }); Evt.AttachEventToElement(element, ASPx.TouchUIHelper.pointerEnabled ? ASPx.TouchUIHelper.pointerOutEventName : "mouseout", function (evt) { mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler); }); } Evt.GetEventRelatedTarget = function(evt, isMouseOverEvent) { return evt.relatedTarget || (isMouseOverEvent ? evt.srcElement : evt.toElement); } function mouseEnterHandler(evt, element, onMouseOverHandler, onMouseOutHandler) { var isMouseOverExecuted = !!element.dxMouseOverExecuted; var isMouseOverEvent = (evt.type == "mouseover" || evt.type == ASPx.TouchUIHelper.pointerOverEventName); if(isMouseOverEvent && isMouseOverExecuted || !isMouseOverEvent && !isMouseOverExecuted) return; var source = Evt.GetEventRelatedTarget(evt, isMouseOverEvent); if(!ASPx.GetIsParent(element, source)) { element.dxMouseOverExecuted = isMouseOverEvent; if(isMouseOverEvent) onMouseOverHandler(element); else onMouseOutHandler(element); } else if(isMouseOverEvent && !isMouseOverExecuted) { element.dxMouseOverExecuted = true; onMouseOverHandler(element); } } Evt.DispatchEvent = function(target, eventName, canBubble, cancellable) { var event; if(Browser.IE && Browser.Version < 9) { eventName = "on" + eventName; if(eventName in target) { event = document.createEventObject(); target.fireEvent("on" + eventName, event); } } else { event = document.createEvent("Event"); event.initEvent(eventName, canBubble || false, cancellable || false); target.dispatchEvent(event); } } Evt.EmulateDocumentOnMouseDown = function(evt) { Evt.EmulateOnMouseDown(document, evt); } Evt.EmulateOnMouseDown = function(element, evt) { if(Browser.IE && Browser.Version < 9) element.fireEvent("onmousedown", evt); else if(!Browser.WebKitFamily){ var emulatedEvt = document.createEvent("MouseEvents"); emulatedEvt.initMouseEvent("mousedown", true, true, window, 0, evt.screenX, evt.screenY, evt.clientX, evt.clientY, evt.ctrlKey, evt.altKey, evt.shiftKey, false, 0, null); element.dispatchEvent(emulatedEvt); } } Evt.EmulateOnMouseEvent = function (type, element, evt) { evt.type = type; var emulatedEvt = document.createEvent("MouseEvents"); emulatedEvt.initMouseEvent(type, true, true, window, 0, evt.screenX, evt.screenY, evt.clientX, evt.clientY, evt.ctrlKey, evt.altKey, evt.shiftKey, false, 0, null); emulatedEvt.target = element; element.dispatchEvent(emulatedEvt); } Evt.EmulateMouseClick = function (element, evt) { var x = element.offsetWidth / 2; var y = element.offsetHeight / 2; if (!evt) evt = { bubbles: true, cancelable: true, view: window, detail: 1, screenX: 0, screenY: 0, clientX: x, clientY: y, ctrlKey: false, altKey: false, shiftKey: false, metaKey: false, button: 0, relatedTarget: null }; Evt.EmulateOnMouseEvent("mousedown", element, evt); Evt.EmulateOnMouseEvent("mouseup", element, evt); Evt.EmulateOnMouseEvent("click", element, evt); } Evt.DoElementClick = function(element) { try{ element.click(); } catch(e){ } } ASPx.Evt = Evt; var Attr = { }; Attr.GetAttribute = function(obj, attrName){ if(obj.getAttribute) return obj.getAttribute(attrName); else if(obj.getPropertyValue) return obj.getPropertyValue(attrName); return null; } Attr.SetAttribute = function(obj, attrName, value){ if(obj.setAttribute) obj.setAttribute(attrName, value); else if(obj.setProperty) obj.setProperty(attrName, value, ""); } Attr.RemoveAttribute = function(obj, attrName){ if(obj.removeAttribute) obj.removeAttribute(attrName); else if(obj.removeProperty) obj.removeProperty(attrName); } Attr.IsExistsAttribute = function(obj, attrName){ var value = Attr.GetAttribute(obj, attrName); return (value != null) && (value !== ""); } Attr.SetOrRemoveAttribute = function(obj, attrName, value) { if(!value) Attr.RemoveAttribute(obj, attrName); else Attr.SetAttribute(obj, attrName, value); } Attr.SaveAttribute = function(obj, attrName, savedObj, savedAttrName){ if(!Attr.IsExistsAttribute(savedObj, savedAttrName)){ var oldValue = Attr.IsExistsAttribute(obj, attrName) ? Attr.GetAttribute(obj, attrName) : ASPx.EmptyObject; Attr.SetAttribute(savedObj, savedAttrName, oldValue); } } Attr.SaveStyleAttribute = function(obj, attrName){ Attr.SaveAttribute(obj.style, attrName, obj, "saved" + attrName); } Attr.ChangeAttributeExtended = function(obj, attrName, savedObj, savedAttrName, newValue){ Attr.SaveAttribute(obj, attrName, savedObj, savedAttrName); Attr.SetAttribute(obj, attrName, newValue); } Attr.ChangeAttribute = function(obj, attrName, newValue){ Attr.ChangeAttributeExtended(obj, attrName, obj, "saved" + attrName, newValue); } Attr.ChangeStyleAttribute = function(obj, attrName, newValue){ Attr.ChangeAttributeExtended(obj.style, attrName, obj, "saved" + attrName, newValue); } Attr.ResetAttributeExtended = function(obj, attrName, savedObj, savedAttrName){ Attr.SaveAttribute(obj, attrName, savedObj, savedAttrName); Attr.SetAttribute(obj, attrName, ""); Attr.RemoveAttribute(obj, attrName); } Attr.ResetAttribute = function(obj, attrName){ Attr.ResetAttributeExtended(obj, attrName, obj, "saved" + attrName); } Attr.ResetStyleAttribute = function(obj, attrName){ Attr.ResetAttributeExtended(obj.style, attrName, obj, "saved" + attrName); } Attr.RestoreAttributeExtended = function(obj, attrName, savedObj, savedAttrName){ if(Attr.IsExistsAttribute(savedObj, savedAttrName)){ var oldValue = Attr.GetAttribute(savedObj, savedAttrName); if(oldValue != ASPx.EmptyObject) Attr.SetAttribute(obj, attrName, oldValue); else Attr.RemoveAttribute(obj, attrName); Attr.RemoveAttribute(savedObj, savedAttrName); return true; } return false; } Attr.RestoreAttribute = function(obj, attrName){ return Attr.RestoreAttributeExtended(obj, attrName, obj, "saved" + attrName); } Attr.RestoreStyleAttribute = function(obj, attrName){ return Attr.RestoreAttributeExtended(obj.style, attrName, obj, "saved" + attrName); } Attr.CopyAllAttributes = function(sourceElem, destElement) { var attrs = sourceElem.attributes; for(var n = 0; n < attrs.length; n++) { var attr = attrs[n]; if(attr.specified) { var attrName = attr.nodeName; var attrValue = sourceElem.getAttribute(attrName, 2); if(attrValue == null) attrValue = attr.nodeValue; destElement.setAttribute(attrName, attrValue, 0); } } if(sourceElem.style.cssText !== '') destElement.style.cssText = sourceElem.style.cssText; } Attr.RemoveAllAttributes = function(element, excludedAttributes) { var excludedAttributesHashTable = {}; if(excludedAttributes) excludedAttributesHashTable = Data.CreateHashTableFromArray(excludedAttributes); if(element.attributes) { var attrArray = element.attributes; for(var i = 0; i < attrArray.length; i++) { var attrName = attrArray[i].name; if(!ASPx.IsExists(excludedAttributesHashTable[attrName.toLowerCase()])) { try { attrArray.removeNamedItem(attrName); } catch (e) { } } } } } Attr.RemoveStyleAttribute = function(element, attrName) { if(element.style) { if(Browser.Firefox && element.style[attrName]) element.style[attrName] = ""; if(element.style.removeAttribute && element.style.removeAttribute != "") element.style.removeAttribute(attrName); else if(element.style.removeProperty && element.style.removeProperty != "") element.style.removeProperty(attrName); } } Attr.RemoveAllStyles = function(element) { if(element.style) { for(var key in element.style) Attr.RemoveStyleAttribute(element, key); Attr.RemoveAttribute(element, "style"); } } Attr.GetTabIndexAttributeName = function(){ return Browser.IE ? "tabIndex" : "tabindex"; } Attr.ChangeTabIndexAttribute = function(element){ var attribute = Attr.GetTabIndexAttributeName(); if(Attr.GetAttribute(element, attribute) != -1) Attr.ChangeAttribute(element, attribute, -1); } Attr.SaveTabIndexAttributeAndReset = function(element) { var attribute = Attr.GetTabIndexAttributeName(); Attr.SaveAttribute(element, attribute, element, "saved" + attribute); Attr.SetAttribute(element, attribute, -1); } Attr.RestoreTabIndexAttribute = function(element){ var attribute = Attr.GetTabIndexAttributeName(); if(Attr.IsExistsAttribute(element, attribute)) { if(Attr.GetAttribute(element, attribute) == -1) { if(Attr.IsExistsAttribute(element, "saved" + attribute)){ var oldValue = Attr.GetAttribute(element, "saved" + attribute); if(oldValue != ASPx.EmptyObject) Attr.SetAttribute(element, attribute, oldValue); else { if(Browser.WebKitFamily) Attr.SetAttribute(element, attribute, 0); Attr.RemoveAttribute(element, attribute); } Attr.RemoveAttribute(element, "saved" + attribute); } } } } Attr.ChangeAttributesMethod = function(enabled){ return enabled ? Attr.RestoreAttribute : Attr.ResetAttribute; } Attr.InitiallyChangeAttributesMethod = function(enabled){ return enabled ? Attr.ChangeAttribute : Attr.ResetAttribute; } Attr.ChangeStyleAttributesMethod = function(enabled){ return enabled ? Attr.RestoreStyleAttribute : Attr.ResetStyleAttribute; } Attr.InitiallyChangeStyleAttributesMethod = function(enabled){ return enabled ? Attr.ChangeStyleAttribute : Attr.ResetStyleAttribute; } Attr.ChangeEventsMethod = function(enabled){ return enabled ? Evt.AttachEventToElement : Evt.DetachEventFromElement; } Attr.ChangeDocumentEventsMethod = function(enabled){ return enabled ? Evt.AttachEventToDocument : Evt.DetachEventFromDocument; } ASPx.Attr = Attr; var Aria = { checked: "aria-checked", descendant: "aria-activedescendant", described: "aria-describedby", disabled: "aria-disabled", expanded: "aria-expanded", haspopup: "aria-haspopup", invalid: "aria-invalid", label: "aria-label", labelled: "aria-labelledby", level: "aria-level", owns: "aria-owns", posinset: "aria-posinset", role: "role", selected: "aria-selected", setsize: "aria-setsize", valuemax: "aria-valuemax", valuemin: "aria-valuemin", valuenow: "aria-valuenow" }; Aria.SetOrRemoveDescendant = function(obj, value) { ASPx.Attr.SetOrRemoveAttribute(obj, Aria.descendant, value); } Aria.SetOrRemoveLabel = function(obj, value) { ASPx.Attr.SetOrRemoveAttribute(obj, Aria.label, value); } Aria.SetOrRemoveLabelled = function(obj, value) { ASPx.Attr.SetOrRemoveAttribute(obj, Aria.labelled, value); } Aria.SetSilence = function(obj) { ASPx.Attr.SetAttribute(obj, Aria.label, ";"); } ASPx.Attr.Aria = Aria; var Color = { }; function _aspxToHex(d) { return (d < 16) ? ("0" + d.toString(16)) : d.toString(16); } Color.ColorToHexadecimal = function(colorValue) { if(typeof(colorValue) == "number") { var r = colorValue & 0xFF; var g = (colorValue >> 8) & 0xFF; var b = (colorValue >> 16) & 0xFF; return "#" + _aspxToHex(r) + _aspxToHex(g) + _aspxToHex(b); } if(colorValue && (colorValue.substr(0, 3).toLowerCase() == "rgb")) { var re = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/; var regResult = colorValue.toLowerCase().match(re); if(regResult) { var r = parseInt(regResult[1]); var g = parseInt(regResult[2]); var b = parseInt(regResult[3]); return "#" + _aspxToHex(r) + _aspxToHex(g) + _aspxToHex(b); } return null; } if(colorValue && (colorValue.charAt(0) == "#")) return colorValue; return null; } Color.Names = { AddColorNames: function(stringResourcesObj) { if(stringResourcesObj) { for(var key in stringResourcesObj) this[key] = stringResourcesObj[key]; } } } ASPx.Color = Color; var Url = { }; Url.Navigate = function(url, target) { var javascriptPrefix = "javascript:"; if(url == "") return; else if(url.indexOf(javascriptPrefix) != -1) eval(url.substr(javascriptPrefix.length)); else { try{ if(target != "") navigateTo(url, target); else location.href = url; } catch(e){ } } } Url.NavigateByLink = function(linkElement) { Url.Navigate(Attr.GetAttribute(linkElement, "href"), linkElement.target); } Url.GetAbsoluteUrl = function(url) { if(url) url = Url.getURLObject(url).href; return url; } var absolutePathPrefixes = [ "about:", "file:///", "ftp://", "gopher://", "http://", "https://", "javascript:", "mailto:", "news:", "res://", "telnet://", "view-source:" ]; Url.isAbsoluteUrl = function(url) { if (url) { for (var i = 0; i < absolutePathPrefixes.length; i++) { if(url.indexOf(absolutePathPrefixes[i]) == 0) return true; } } return false; } Url.getURLObject = function(url) { var link = document.createElement('A'); link.href = url || ""; return { href: link.href, protocol: link.protocol, host: link.host, port: link.port, pathname: link.pathname, search: link.search, hash: link.hash }; } Url.getRootRelativeUrl = function(url) { return getRelativeUrl(url, !Url.isRootRelativeUrl(url), true); } Url.getPathRelativeUrl = function(url) { return getRelativeUrl(url, !Url.isPathRelativeUrl(url), false); } function getRelativeUrl(url, isValid, isRootRelative) { if(url && !(/data:([^;]+\/?[^;]*)(;charset=[^;]*)?(;base64,)/.test(url)) && isValid) { var urlObject = Url.getURLObject(url); var baseUrlObject = Url.getURLObject(); if(!Url.isAbsoluteUrl(url) || urlObject.host === baseUrlObject.host && urlObject.protocol === baseUrlObject.protocol) { url = urlObject.pathname; if(!isRootRelative) url = getPathRelativeUrl(baseUrlObject.pathname, url); url = url + urlObject.search + urlObject.hash; } } return url; } function getPathRelativeUrl(baseUrl, url) { var requestSegments = getSegments(baseUrl, false); var urlSegments = getSegments(url, true); return buildPathRelativeUrl(requestSegments, urlSegments, 0, 0, ""); } function getSegments(url, addTail) { var segments = []; var startIndex = 0; var endIndex = -1; while ((endIndex = url.indexOf("/", startIndex)) != -1) { segments.push(url.substring(startIndex, ++endIndex)); startIndex = endIndex; } if(addTail && startIndex < url.length) segments.push(url.substring(startIndex, url.length)); return segments; } function buildPathRelativeUrl(requestSegments, urlSegments, reqIndex, urlIndex, buffer) { if(urlIndex >= urlSegments.length) return buffer; if(reqIndex >= requestSegments.length) return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex, urlIndex + 1, buffer + urlSegments[urlIndex]); if(requestSegments[reqIndex] === urlSegments[urlIndex] && urlIndex === reqIndex) return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex + 1, urlIndex + 1, buffer); return buildPathRelativeUrl(requestSegments, urlSegments, reqIndex + 1, urlIndex, buffer + "../"); } Url.isPathRelativeUrl = function(url) { return !!url && !Url.isAbsoluteUrl(url) && url.indexOf("/") != 0; } Url.isRootRelativeUrl = function(url) { return !!url && !Url.isAbsoluteUrl(url) && url.indexOf("/") == 0 && url.indexOf("//") != 0; } function navigateTo(url, target) { var lowerCaseTarget = target.toLowerCase(); if("_top" == lowerCaseTarget) top.location.href = url; else if("_self" == lowerCaseTarget) location.href = url; else if("_search" == lowerCaseTarget) openInNewWindow(url) else if("_media" == lowerCaseTarget) openInNewWindow(url) else if("_parent" == lowerCaseTarget) window.parent.location.href = url; else if("_blank" == lowerCaseTarget) openInNewWindow(url) else { var frame = getFrame(top.frames, target); if(frame != null) frame.location.href = url; else openInNewWindow(url) } } function openInNewWindow(url) { if(ASPx.Browser.Safari) openInNewWindowViaIframe(url); else { var newWindow = window.open(); newWindow.opener = null; newWindow.location = url; } } function openInNewWindowViaIframe(url) { var iframe = document.createElement('iframe'); iframe.style.display = 'none'; document.body.appendChild(iframe); var iframeDoc = iframe.contentDocument || iframe.contentWindow.document; var openArgs = '"' + url + '"'; var script = iframeDoc.createElement('script'); script.type = 'text/javascript'; script.text = 'window.parent = null; ' + 'window.top = null;' + 'window.frameElement = null;' + 'var child = window.open(' + openArgs + ');' + 'child.opener = null'; iframeDoc.body.appendChild(script); document.body.removeChild(iframe); } ASPx.Url = Url; var Office = {} Office.getHandlerResourceUrl = function(pageUrl) { var url = pageUrl ? pageUrl : document.URL; if(url.indexOf("?") != -1) url = url.substring(0, url.indexOf("?")); if(url.indexOf("#") != -1) url = url.substring(0, url.indexOf("#")); if(/.*\.aspx$/.test(url)) url = url.substring(0, url.lastIndexOf("/") + 1); else if(url.lastIndexOf("/") != url.length - 1) url += "/"; return url; } Office.isBrowserSupportExtendedClientBuffer = function() { return ASPx.Browser.WebKitFamily || (ASPx.Browser.Firefox && ASPx.Browser.MajorVersion >= 50) || (ASPx.Browser.Edge && ASPx.Browser.MajorVersion >= 14); } ASPx.Office = Office; var Json = { }; function isValid(JsonString) { return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(JsonString.replace(/"(\\.|[^"\\])*"/g, ''))) } Json.Eval = function(jsonString, controlName) { if(isValid(jsonString)) return eval("(" + jsonString + ")"); else throw new Error(controlName + " received incorrect JSON-data: " + jsonString); } Json.ToJson = function(param){ var paramType = typeof(param); if((paramType == "undefined") || (param == null)) return null; if((paramType == "object") && (typeof(param.__toJson) == "function")) return param.__toJson(); if((paramType == "number") || (paramType == "boolean")) return param; if(param.constructor == Date) return dateToJson(param); if(paramType == "string") { var result = param.replace(/\\/g, "\\\\"); result = result.replace(/"/g, "\\\""); result = result.replace(/\n/g, "\\n"); result = result.replace(/\r/g, "\\r"); result = result.replace(//g, "\\u003e"); return "\"" + result + "\""; } if(param.constructor == Array){ var values = []; for(var i = 0; i < param.length; i++) { var jsonValue = Json.ToJson(param[i]); if(jsonValue === null) jsonValue = "null"; values.push(jsonValue); } return "[" + values.join(",") + "]"; } var exceptKeys = {}; if(ASPx.Ident.IsArray(param.__toJsonExceptKeys)) exceptKeys = Data.CreateHashTableFromArray(param.__toJsonExceptKeys); exceptKeys["__toJsonExceptKeys"] = 1; var values = []; for(var key in param){ if(ASPx.IsFunction(param[key])) continue; if(exceptKeys[key] == 1) continue; values.push(Json.ToJson(key) + ":" + Json.ToJson(param[key])); } return "{" + values.join(",") + "}"; } function dateToJson(date) { var result = [ date.getFullYear(), date.getMonth(), date.getDate() ]; var time = { h: date.getHours(), m: date.getMinutes(), s: date.getSeconds(), ms: date.getMilliseconds() }; if(time.h || time.m || time.s || time.ms) result.push(time.h); if(time.m || time.s || time.ms) result.push(time.m); if(time.s || time.ms) result.push(time.s); if(time.ms) result.push(time.ms); return "new Date(" + result.join() + ")"; } ASPx.Json = Json; ASPx.CreateClass = function(parentClass, properties) { var ret = function() { if(ret.preparing) return delete(ret.preparing); if(ret.constr) { this.constructor = ret; ret.constr.apply(this, arguments); } } ret.prototype = {}; if(parentClass) { parentClass.preparing = true; for(var name in parentClass) { if(parentClass.hasOwnProperty(name) && name != 'constr' && ASPx.IsFunction(parentClass[name]) && !ret[name]) ret[name] = parentClass[name].aspxBind(parentClass); } ret.prototype = new parentClass; ret.prototype.constructor = parentClass; ret.constr = parentClass; } if(properties) { var constructorName = "constructor"; for(var name in properties){ if(name != constructorName) ret.prototype[name] = properties[name]; } if(properties[constructorName] && properties[constructorName] != Object) ret.constr = properties[constructorName]; } return ret; } ASPx.FormatCallbackArg = function(prefix, arg) { if(prefix == null && arg == null) return ""; if(prefix == null) prefix = ""; if(arg == null) arg = ""; if(arg != null && !ASPx.IsExists(arg.length) && ASPx.IsExists(arg.value)) arg = arg.value; arg = arg.toString(); return [prefix, '|', arg.length, '|' , arg].join(''); } ASPx.FormatCallbackArgs = function(callbackData) { var sb = [ ]; for(var i = 0; i < callbackData.length; i++) sb.push(ASPx.FormatCallbackArg(callbackData[i][0], callbackData[i][1])); return sb.join(""); } ASPx.ParseShortcutString = function(shortcutString) { if(!shortcutString) return 0; var isCtrlKey = false; var isShiftKey = false; var isAltKey = false; var isMetaKey = false; var keyCode = null; var shcKeys = shortcutString.toString().split("+"); if(shcKeys.length > 0) { for(var i = 0; i < shcKeys.length; i++) { var key = Str.Trim(shcKeys[i].toUpperCase()); switch (key) { case "CTRL": isCtrlKey = true; break; case "SHIFT": isShiftKey = true; break; case "ALT": isAltKey = true; break; case "CMD": isMetaKey = true; break; case "F1": keyCode = ASPx.Key.F1; break; case "F2": keyCode = ASPx.Key.F2; break; case "F3": keyCode = ASPx.Key.F3; break; case "F4": keyCode = ASPx.Key.F4; break; case "F5": keyCode = ASPx.Key.F5; break; case "F6": keyCode = ASPx.Key.F6; break; case "F7": keyCode = ASPx.Key.F7; break; case "F8": keyCode = ASPx.Key.F8; break; case "F9": keyCode = ASPx.Key.F9; break; case "F10": keyCode = ASPx.Key.F10; break; case "F11": keyCode = ASPx.Key.F11; break; case "F12": keyCode = ASPx.Key.F12; break; case "ENTER": keyCode = ASPx.Key.Enter; break; case "HOME": keyCode = ASPx.Key.Home; break; case "END": keyCode = ASPx.Key.End; break; case "LEFT": keyCode = ASPx.Key.Left; break; case "RIGHT": keyCode = ASPx.Key.Right; break; case "UP": keyCode = ASPx.Key.Up; break; case "DOWN": keyCode = ASPx.Key.Down; break; case "PAGEUP": keyCode = ASPx.Key.PageUp; break; case "PAGEDOWN": keyCode = ASPx.Key.PageDown; break; case "SPACE": keyCode = ASPx.Key.Space; break; case "TAB": keyCode = ASPx.Key.Tab; break; case "BACK": keyCode = ASPx.Key.Backspace; break; case "CONTEXT": keyCode = ASPx.Key.ContextMenu; break; case "ESCAPE": case "ESC": keyCode = ASPx.Key.Esc; break; case "DELETE": case "DEL": keyCode = ASPx.Key.Delete; break; case "INSERT": case "INS": keyCode = ASPx.Key.Insert; break; case "PLUS": keyCode = "+".charCodeAt(0); break; default: keyCode = key.charCodeAt(0); break; } } } else ASPx.ShowErrorAlert("Invalid shortcut"); return ASPx.GetShortcutCode(keyCode, isCtrlKey, isShiftKey, isAltKey, isMetaKey); } ASPx.GetShortcutCode = function(keyCode, isCtrlKey, isShiftKey, isAltKey, isMetaKey) { var value = keyCode & 0xFFFF; var flags = 0; flags |= isCtrlKey ? 1 << 0 : 0; flags |= isShiftKey ? 1 << 2 : 0; flags |= isAltKey ? 1 << 4 : 0; flags |= isMetaKey ? 1 << 8 : 0; value |= flags << 16; return value; } ASPx.GetShortcutCodeByEvent = function(evt) { return ASPx.GetShortcutCode(Evt.GetKeyCode(evt), evt.ctrlKey, evt.shiftKey, evt.altKey, ASPx.Browser.MacOSPlatform ? evt.metaKey : false); } ASPx.IsPasteShortcut = function(evt) { if(evt.type === "paste") return true; var keyCode = Evt.GetKeyCode(evt); if(Browser.NetscapeFamily && evt.which == 0) keyCode = evt.keyCode; return (evt.ctrlKey && (keyCode == 118 || (keyCode == 86))) || (evt.shiftKey && !evt.ctrlKey && !evt.altKey && (keyCode == ASPx.Key.Insert)) ; } var NotPrintableKeyCodes = null; ASPx.IsPrintableKey = function(keyCode) { if (!NotPrintableKeyCodes) NotPrintableKeyCodes = Object.keys(ASPx.Key).map(function(key) { return ASPx.Key[key]; }); return !ASPx.Data.ArrayContains(NotPrintableKeyCodes, keyCode); }; ASPx.SetFocus = function(element, selectAction) { function focusCore(element, selectAction){ try { element.focus(); if(Browser.IE && document.activeElement != element) element.focus(); if(selectAction) { var currentSelection = Selection.GetInfo(element); if(currentSelection.startPos == currentSelection.endPos) { switch(selectAction) { case "start": Selection.SetCaretPosition(element, 0); break; case "all": Selection.Set(element); break; } } } } catch (e) { } } if(ASPxClientUtils.iOSPlatform) focusCore(element, selectAction); else { window.setTimeout(function() { focusCore(element, selectAction); }, 100); } } ASPx.IsFocusableCore = function(element, skipContainerVisibilityCheck) { var current = element; while(current && current.nodeType == 1) { if(current == element || !skipContainerVisibilityCheck(current)) { if(current.tagName == "BODY") return true; if(current.disabled || !ASPx.GetElementDisplay(current) || !ASPx.GetElementVisibility(current)) return false; } current = current.parentNode; } return true; } ASPx.IsFocusable = function(element) { return ASPx.IsFocusableCore(element, ASPx.FalseFunction); } ASPx.IsActionElement = function(element) { var tabIndex = parseInt(ASPx.Attr.GetAttribute(element, ASPx.Attr.GetTabIndexAttributeName())); var hasTabIndex = !isNaN(tabIndex); var hasNonNegativeTabIndex = hasTabIndex && tabIndex > -1; var hasNegativeTabIndex = hasTabIndex && tabIndex < 0; var tagName = element.tagName; var focusableElementTags = ["BUTTON", "SELECT", "TEXTAREA", "OPTION", "IFRAME"]; var isFocusableCore = ASPx.IsFocusable(element); var isFocusableTag = focusableElementTags.indexOf(tagName) !== -1; var isFocusableLink = tagName === "A" && (element.href || hasNonNegativeTabIndex); var isFocusableInput = tagName === "INPUT" && element.type.toLowerCase() !== "hidden"; var isFocusableByTabIndex = tagName !== "INPUT" && hasNonNegativeTabIndex; return isFocusableCore && !hasNegativeTabIndex && (isFocusableTag || isFocusableLink || isFocusableInput || isFocusableByTabIndex); }; ASPx.GetCanBeActiveElementsInContainer = function(container) { var canBeActiveTags = ["INPUT", "A", "UL", "BUTTON", "TEXTAREA", "SELECT", "IFRAME"], canBeActiveElements = []; Data.ForEach(canBeActiveTags, function(tag) { var elements = container.getElementsByTagName(tag); canBeActiveElements = canBeActiveElements.concat([].slice.call(elements)); }); return canBeActiveElements; }; ASPx.FindChildActionElements = function(container, predicate) { return ASPx.GetNodes(container, function(el) { var allowedByPredicate = !predicate || predicate(el); return allowedByPredicate && ASPx.IsActionElement(el); }); } ASPx.FindChildActionElement = function(container, predicate) { var result = null; if(!container) return result; var actionElements = ASPx.FindChildActionElements(container, predicate); if(actionElements.length > 0) { var tabIndexElements = actionElements.filter(function(x) { return parseInt(ASPx.Attr.GetAttribute(x, "tabindex")) > 0; }); tabIndexElements.sort(function(x, y) { xTabIndex = parseInt(ASPx.Attr.GetAttribute(x, "tabindex")); yTabIndex = parseInt(ASPx.Attr.GetAttribute(y, "tabindex")); return xTabIndex - yTabIndex; }); result = tabIndexElements[0] || actionElements[0]; } return result; } ASPx.GetParentClientControls = function(name) { var nameParts = name.split("_"); var result = [ ]; var controlCollection = ASPx.GetControlCollection(); for(var i = 1; i <= nameParts.length; i++) { var controlName = nameParts.slice(0, i).join("_"); var control = controlCollection.Get(controlName); if(control) result.push(control); } return result; } ASPx.GetRootControl = function(childControlName) { var childControlNameParts = childControlName.split("_"); var controlCollection = ASPx.GetControlCollection(); for(var i = 1; i <= childControlNameParts.length; i++) { var controlName = childControlNameParts.slice(0, i).join("_"); var control = controlCollection.GetByName(controlName); if(control) return control; } } ASPx.IsExists = function(obj){ return (typeof(obj) != "undefined") && (obj != null); } ASPx.IsFunction = function(obj){ return typeof(obj) == "function"; } ASPx.IsNumber = function(str) { return !isNaN(parseFloat(str)) && isFinite(str); } ASPx.GetDefinedValue = function(value, defaultValue){ return (typeof(value) != "undefined") ? value : defaultValue; } ASPx.CorrectJSFloatNumber = function(number) { var ret = 21; var numString = number.toPrecision(21); numString = numString.replace("-", ""); var integerDigitsCount = numString.indexOf(ASPx.PossibleNumberDecimalSeparators[0]); if(integerDigitsCount < 0) integerDigitsCount = numString.indexOf(ASPx.PossibleNumberDecimalSeparators[1]); var floatDigitsCount = numString.length - integerDigitsCount - 1; if(floatDigitsCount < 10) return number; if(integerDigitsCount > 0) { ret = integerDigitsCount + 12; } var toPrecisionNumber = Math.min(ret, 21); var newValueString = number.toPrecision(toPrecisionNumber); return parseFloat(newValueString, 10); } ASPx.CorrectRounding = function(number, step) { var regex = /[,|.](.*)/, isFloatValue = regex.test(number), isFloatStep = regex.test(step); if(isFloatValue || isFloatStep) { var valueAccuracy = (isFloatValue) ? regex.exec(number)[0].length - 1 : 0, stepAccuracy = (isFloatStep) ? regex.exec(step)[0].length - 1 : 0, accuracy = Math.max(valueAccuracy, stepAccuracy); var multiplier = Math.pow(10, accuracy); number = Math.round((number + step) * multiplier) / multiplier; return number; } return number + step; } ASPx.GetActiveElement = function() { try{ return document.activeElement; } catch(e) { return null; } } var verticalScrollBarWidth; ASPx.GetVerticalScrollBarWidth = function() { if(typeof(verticalScrollBarWidth) == "undefined") { var container = document.createElement("DIV"); container.style.cssText = "position: absolute; top: 0px; left: 0px; visibility: hidden; width: 200px; height: 150px; overflow: hidden; box-sizing: content-box"; document.body.appendChild(container); var child = document.createElement("P"); container.appendChild(child); child.style.cssText = "width: 100%; height: 200px;"; var widthWithoutScrollBar = child.offsetWidth; container.style.overflow = "scroll"; var widthWithScrollBar = child.offsetWidth; if(widthWithoutScrollBar == widthWithScrollBar) widthWithScrollBar = container.clientWidth; verticalScrollBarWidth = widthWithoutScrollBar - widthWithScrollBar; document.body.removeChild(container); } return verticalScrollBarWidth; } function hideScrollBarCore(element, scrollName) { if(element.tagName == "IFRAME") { if((element.scrolling == "yes") || (element.scrolling == "auto")) { Attr.ChangeAttribute(element, "scrolling", "no"); return true; } } else if(element.tagName == "DIV") { if((element.style[scrollName] == "scroll") || (element.style[scrollName] == "auto")) { Attr.ChangeStyleAttribute(element, scrollName, "hidden"); return true; } } return false; } function restoreScrollBarCore(element, scrollName) { if(element.tagName == "IFRAME") return Attr.RestoreAttribute(element, "scrolling"); else if(element.tagName == "DIV") return Attr.RestoreStyleAttribute(element, scrollName); return false; } ASPx.SetScrollBarVisibilityCore = function(element, scrollName, isVisible) { return isVisible ? restoreScrollBarCore(element, scrollName) : hideScrollBarCore(element, scrollName); } ASPx.SetScrollBarVisibility = function(element, isVisible) { if(ASPx.SetScrollBarVisibilityCore(element, "overflow", isVisible)) return true; var result = ASPx.SetScrollBarVisibilityCore(element, "overflowX", isVisible) || ASPx.SetScrollBarVisibilityCore(element, "overflowY", isVisible); return result; } ASPx.SetInnerHtml = function(element, html) { if(Browser.IE) { element.innerHTML = " " + html; element.removeChild(element.firstChild); } else element.innerHTML = html; } ASPx.GetInnerText = function(container) { if(Browser.Safari && Browser.MajorVersion <= 5) { var filter = getHtml2PlainTextFilter(); filter.innerHTML = container.innerHTML; ASPx.SetElementDisplay(filter, true); var innerText = filter.innerText; ASPx.SetElementDisplay(filter, false); return innerText; } else if(Browser.NetscapeFamily || Browser.WebKitFamily || (Browser.IE && Browser.Version >= 9) || Browser.Edge) { return container.textContent; } else return container.innerText; } var html2PlainTextFilter = null; function getHtml2PlainTextFilter() { if(html2PlainTextFilter == null) { html2PlainTextFilter = document.createElement("DIV"); html2PlainTextFilter.style.width = "0"; html2PlainTextFilter.style.height = "0"; html2PlainTextFilter.style.overflow = "visible"; ASPx.SetElementDisplay(html2PlainTextFilter, false); document.body.appendChild(html2PlainTextFilter); } return html2PlainTextFilter; } ASPx.CreateHiddenField = function(name, id) { var input = document.createElement("INPUT"); input.setAttribute("type", "hidden"); if(name) input.setAttribute("name", name); if(id) input.setAttribute("id", id); return input; } ASPx.CloneObject = function(srcObject) { if(typeof(srcObject) != 'object' || srcObject == null) return srcObject; var newObject = { }; for(var i in srcObject) newObject[i] = srcObject[i]; return newObject; } ASPx.IsPercentageSize = function(size) { return size && size.indexOf('%') != -1; } ASPx.GetElementById = function(id) { if(document.getElementById) return document.getElementById(id); else return document.all[id]; } ASPx.GetInputElementById = function(id) { var elem = ASPx.GetElementById(id); if(!Browser.IE) return elem; if(elem) { if(elem.id == id) return elem; else { for(var i = 1; i < document.all[id].length; i++) { if(document.all[id][i].id == id) return document.all[id][i]; } } } return null; } ASPx.GetElementByIdInDocument = function(documentObj, id) { if(documentObj.getElementById) return documentObj.getElementById(id); else return documentObj.all[id]; } ASPx.GetIsParent = function(parentElement, element) { if(!parentElement || !element) return false; while(element){ if(element === parentElement) return true; if(element.tagName === "BODY") return false; element = element.parentNode; } return false; } ASPx.GetParentById = function(element, id) { element = element.parentNode; while(element){ if(element.id === id) return element; element = element.parentNode; } return null; } ASPx.GetParentByPartialId = function(element, idPart){ while(element && element.tagName != "BODY") { if(element.id && element.id.match(idPart)) return element; element = element.parentNode; } return null; } ASPx.GetParentByTagName = function(element, tagName) { tagName = tagName.toUpperCase(); while(element) { if(element.tagName === "BODY") return null; if(element.tagName === tagName) return element; element = element.parentNode; } return null; } function getParentByClassNameInternal(element, className, selector) { while(element != null) { if(element.tagName == "BODY" || element.nodeName == "#document") return null; if(selector(element, className)) return element; element = element.parentNode; } return null; } ASPx.GetParentByPartialClassName = function(element, className) { return getParentByClassNameInternal(element, className, ASPx.ElementContainsCssClass); } ASPx.GetParentByClassName = function(element, className) { return getParentByClassNameInternal(element, className, ASPx.ElementHasCssClass); } ASPx.GetParentByTagNameAndAttributeValue = function(element, tagName, attrName, attrValue) { tagName = tagName.toUpperCase(); while(element != null) { if(element.tagName == "BODY") return null; if(element.tagName == tagName && element[attrName] == attrValue) return element; element = element.parentNode; } return null; } ASPx.GetParent = function(element, testFunc){ if (!ASPx.IsExists(testFunc)) return null; while(element != null && element.tagName != "BODY"){ if(testFunc(element)) return element; element = element.parentNode; } return null; } ASPx.GetPreviousSibling = function(el) { if(el.previousElementSibling) { return el.previousElementSibling; } else { while(el = el.previousSibling) { if(el.nodeType === 1) return el; } } } ASPx.ElementHasCssClass = function(element, className) { try { var classList = element.classList; if(!classList) { if(!element.className) return false; var elementClasses = element.className.split(" "); } var classNames = className.split(" "); for(var i = classNames.length - 1; i >= 0; i--) { if(classList) { if(!classList.contains(classNames[i])) return false; continue; } if(Data.ArrayIndexOf(elementClasses, classNames[i]) < 0) return false; } return true; } catch(e) { return false; } } ASPx.ElementContainsCssClass = function(element, className) { try { if(!element.className) return false; return element.className.indexOf(className) != -1; } catch(e) { return false; } } ASPx.AddClassNameToElement = function (element, className) { if(!element) return; if (!ASPx.ElementHasCssClass(element, className)) element.className = (element.className === "") ? className : element.className + " " + className; } ASPx.RemoveClassNameFromElement = function(element, className) { if(!element) return; var updClassName = " " + element.className + " "; var newClassName = updClassName.replace(" " + className + " ", " "); if(updClassName.length != newClassName.length) element.className = Str.Trim(newClassName); } ASPx.GetClassNameList = function(element) { if(element.classList) return [ ].slice.call(element.classList); return el.className.replace(/^\s+|\s+$/g, '').split(/\s+/); } function nodeListToArray(nodeList, filter) { var result = []; for(var i = 0, element; element = nodeList[i]; i++) { if(filter && !filter(element)) continue; result.push(element); } return result; } function getItemByIndex(collection, index) { if(!index) index = 0; if(collection != null && collection.length > index) return collection[index]; return null; } ASPx.GetChildNodesByClassName = function(parent, className) { if(parent.querySelectorAll) { var children = parent.querySelectorAll('.' + className); return nodeListToArray(children, function(element) { return element.parentNode === parent; }); } return ASPx.GetChildNodes(parent, function(elem) { return elem.className && ASPx.ElementHasCssClass(elem, className); }); } ASPx.GetChildNodesByPartialClassName = function(element, className) { return ASPx.GetChildElementNodesByPredicate(element, function(child) { return ASPx.ElementContainsCssClass(child, className); }); } ASPx.GetChildByPartialClassName = function(element, className, index) { if(element != null){ var collection = ASPx.GetChildNodesByPartialClassName(element, className); return getItemByIndex(collection, index); } return null; } ASPx.GetChildByClassName = function(element, className, index) { if(element != null){ var collection = ASPx.GetChildNodesByClassName(element, className); return getItemByIndex(collection, index); } return null; } ASPx.GetNodesByPartialClassName = function(element, className) { if(element.querySelectorAll) { var list = element.querySelectorAll('*[class*=' + className + ']'); return nodeListToArray(list); } var collection = element.all || element.getElementsByTagName('*'); var ret = [ ]; if(collection != null) { for(var i = 0; i < collection.length; i ++) { if(ASPx.ElementContainsCssClass(collection[i], className)) ret.push(collection[i]); } } return ret; } ASPx.GetNodesByClassName = function(parent, className) { if(parent.querySelectorAll) { var children = parent.querySelectorAll('.' + className); return nodeListToArray(children); } return ASPx.GetNodes(parent, function(elem) { return elem.className && ASPx.ElementHasCssClass(elem, className); }); } ASPx.GetNodeByClassName = function(element, className, index) { if(element != null){ var collection = ASPx.GetNodesByClassName(element, className); return getItemByIndex(collection, index); } return null; } ASPx.GetChildById = function(element, id) { if(element.all) { var child = element.all[id]; if(!child) { child = element.all(id); if(!child) return Browser.IE ? document.getElementById(id) : null; } if(!ASPx.IsExists(child.length)) return child; else return ASPx.GetElementById(id); } else return ASPx.GetElementById(id); } ASPx.GetNodesByPartialId = function(element, partialName, list) { if(element.id && element.id.indexOf(partialName) > -1) list.push(element); if(element.childNodes) { for(var i = 0; i < element.childNodes.length; i ++) ASPx.GetNodesByPartialId(element.childNodes[i], partialName, list); } } ASPx.GetNodesByTagName = function(element, tagName) { tagName = tagName.toUpperCase(); if(element) { if(element.getElementsByTagName) return element.getElementsByTagName(tagName); else if(element.all && element.all.tags !== undefined) return Browser.Netscape ? element.all.tags[tagName] : element.all.tags(tagName); } return null; } ASPx.GetNodeByTagName = function(element, tagName, index) { if(element != null){ var collection = ASPx.GetNodesByTagName(element, tagName); return getItemByIndex(collection, index); } return null; } ASPx.GetChildNodesByTagName = function(parent, tagName) { return ASPx.GetChildNodes(parent, function (child) { return child.tagName === tagName; }); } ASPx.GetChildByTagName = function(element, tagName, index) { if(element != null){ var collection = ASPx.GetChildNodesByTagName(element, tagName); return getItemByIndex(collection, index); } return null; } ASPx.RetrieveByPredicate = function(scourceCollection, predicate) { var result = []; for(var i = 0; i < scourceCollection.length; i++) { var element = scourceCollection[i]; if(!predicate || predicate(element)) result.push(element); } return result; } ASPx.GetChildNodes = function(parent, predicate) { return ASPx.RetrieveByPredicate(parent.childNodes, predicate); } ASPx.GetNodes = function(parent, predicate) { var c = parent.all || parent.getElementsByTagName('*'); return ASPx.RetrieveByPredicate(c, predicate); } ASPx.GetChildElementNodes = function(parent) { if(!parent) return null; return ASPx.GetChildNodes(parent, function(e) { return e.nodeType == 1 }) } ASPx.GetChildElementNodesByPredicate = function(parent, predicate) { if(!parent) return null; if(!predicate) return ASPx.GetChildElementNodes(parent); return ASPx.GetChildNodes(parent, function(e) { return e.nodeType == 1 && predicate(e); }) } ASPx.GetTextNode = function(element, index) { if(element != null){ var collection = [ ]; ASPx.GetTextNodes(element, collection); return getItemByIndex(collection, index); } return null; } ASPx.GetTextNodes = function(element, collection) { for(var i = 0; i < element.childNodes.length; i ++){ var childNode = element.childNodes[i]; if(ASPx.IsExists(childNode.nodeValue)) collection.push(childNode); ASPx.GetTextNodes(childNode, collection); } } ASPx.GetNormalizedTextNode = function(element, index) { var textNode = ASPx.GetTextNode(element, index); if(textNode != null) ASPx.MergeAdjacentTextNodes(textNode); return textNode; } ASPx.MergeAdjacentTextNodes = function(firstTextNode) { if(!ASPx.IsExists(firstTextNode.nodeValue)) return; var textNode = firstTextNode; while(textNode.nextSibling && ASPx.IsExists(textNode.nextSibling.nodeValue)) { textNode.nodeValue += textNode.nextSibling.nodeValue; textNode.parentNode.removeChild(textNode.nextSibling); } } ASPx.GetElementDocument = function(element) { return element.document || element.ownerDocument; } ASPx.RemoveElement = function(element) { if(element && element.parentNode) element.parentNode.removeChild(element); } ASPx.ReplaceTagName = function(element, newTagName, cloneChilds) { if(element.nodeType != 1) return null; if(element.nodeName == newTagName) return element; cloneChilds = cloneChilds !== undefined ? cloneChilds : true; var doc = element.ownerDocument; var newElem = doc.createElement(newTagName); Attr.CopyAllAttributes(element, newElem); if(cloneChilds) { for(var i = 0; i < element.childNodes.length; i++) newElem.appendChild(element.childNodes[i].cloneNode(true)); } else { for(var child; child = element.firstChild; ) newElem.appendChild(child); } element.parentNode.replaceChild(newElem, element); return newElem; } ASPx.RemoveOuterTags = function(element) { if(ASPx.Browser.IE) { element.insertAdjacentHTML( 'beforeBegin', element.innerHTML ) ; ASPx.RemoveElement(element); } else { var docFragment = element.ownerDocument.createDocumentFragment(); for(var i = 0; i < element.childNodes.length; i++) docFragment.appendChild(element.childNodes[i].cloneNode(true)); element.parentNode.replaceChild(docFragment, element); } } ASPx.WrapElementInNewElement = function(element, newElementTagName) { var wrapElement = null; if(Browser.IE) { var wrapElement = element.ownerDocument.createElement(newElementTagName); wrapElement.appendChild(element.cloneNode(true)); element.parentNode.insertBefore(wrapElement, element); element.parentNode.removeChild(element); } else { var docFragment = element.ownerDocument.createDocumentFragment(); wrapElement = element.ownerDocument.createElement(newElementTagName); docFragment.appendChild(wrapElement); wrapElement.appendChild(element.cloneNode(true)); element.parentNode.replaceChild(docFragment, element); } return wrapElement; } ASPx.InsertElementAfter = function(newElement, targetElement) { var parentElem = targetElement.parentNode; if(parentElem.childNodes[parentElem.childNodes.length - 1] == targetElement) parentElem.appendChild(newElement); else parentElem.insertBefore(newElement, targetElement.nextSibling); } ASPx.SetElementOpacity = function(element, value) { var useOpacityStyle = !Browser.IE || Browser.Version > 8; if(useOpacityStyle){ element.style.opacity = value; } else { if(typeof(element.filters) === "object" && element.filters["DXImageTransform.Microsoft.Alpha"]) element.filters.item("DXImageTransform.Microsoft.Alpha").Opacity = value*100; else element.style.filter = "alpha(opacity=" + (value * 100) + ")"; } } ASPx.GetElementOpacity = function(element) { var useOpacityStyle = !Browser.IE || Browser.Version > 8; if(useOpacityStyle) return parseFloat(ASPx.GetCurrentStyle(element).opacity); else { if(typeof(element.filters) === "object" && element.filters["DXImageTransform.Microsoft.Alpha"]){ return element.filters.item("DXImageTransform.Microsoft.Alpha").Opacity / 100; } else { var alphaValue = ASPx.GetCurrentStyle(element).filter; var value = alphaValue.replace("alpha(opacity=", ""); value = value.replace(")", ""); return parseInt(value) / 100; } return 100; } } ASPx.GetElementDisplay = function(element, isCurrentStyle) { if (isCurrentStyle) return ASPx.GetCurrentStyle(element).display != "none"; return element.style.display != "none"; } ASPx.SetElementDisplay = function(element, value) { if(!element) return; element.style.display = value ? "" : "none"; } ASPx.GetElementVisibility = function(element, isCurrentStyle) { if(isCurrentStyle) return ASPx.GetCurrentStyle(element).visibility != "hidden"; return element.style.visibility != "hidden"; } ASPx.SetElementVisibility = function(element, value) { if(!element) return; element.style.visibility = value ? "visible" : "hidden"; } ASPx.IsElementVisible = function(element, isCurrentStyle) { while(element && element.tagName != "BODY") { if(!ASPx.GetElementDisplay(element, isCurrentStyle) || (!ASPx.GetElementVisibility(element, isCurrentStyle) && !Attr.IsExistsAttribute(element, "errorFrame"))) return false; element = element.parentNode; } return true; } ASPx.IsElementDisplayed = function(element) { while(element && element.tagName != "BODY") { if(!ASPx.GetElementDisplay(element)) return false; element = element.parentNode; } return true; } ASPx.AddStyleSheetLinkToDocument = function(doc, linkUrl) { var newLink = createStyleLink(doc, linkUrl); var head = ASPx.GetHeadElementOrCreateIfNotExist(doc); head.appendChild(newLink); } ASPx.GetHeadElementOrCreateIfNotExist = function(doc) { var elements = ASPx.GetNodesByTagName(doc, "head"); var head = null; if(elements.length == 0) { head = doc.createElement("head"); head.visibility = "hidden"; doc.insertBefore(head, doc.body); } else head = elements[0]; return head; } function createStyleLink(doc, url) { var newLink = doc.createElement("link"); Attr.SetAttribute(newLink, "href", url); Attr.SetAttribute(newLink, "type", "text/css"); Attr.SetAttribute(newLink, "rel", "stylesheet"); return newLink; } ASPx.GetCurrentStyle = function(element) { if(element.currentStyle) return element.currentStyle; else if(document.defaultView && document.defaultView.getComputedStyle) { var result = document.defaultView.getComputedStyle(element, null); if(!result && Browser.Firefox && window.frameElement) { var changes = []; var curElement = window.frameElement; while(!(result = document.defaultView.getComputedStyle(element, null))) { changes.push([curElement, curElement.style.display]); ASPx.SetStylesCore(curElement, "display", "block", true); curElement = curElement.tagName == "BODY" ? curElement.ownerDocument.defaultView.frameElement : curElement.parentNode; } result = ASPx.CloneObject(result); for(var ch, i = 0; ch = changes[i]; i++) ASPx.SetStylesCore(ch[0], "display", ch[1]); var reflow = document.body.offsetWidth; } return result; } return window.getComputedStyle(element, null); } ASPx.CreateStyleSheetInDocument = function(doc) { if(doc.createStyleSheet) { try { return doc.createStyleSheet(); } catch(e) { var message = "The CSS link limit (31) has been exceeded. Please enable CSS merging or reduce the number of CSS files on the page. For details, see http://www.devexpress.com/Support/Center/p/K18487.aspx."; throw new Error(message); } } else { var styleSheet = doc.createElement("STYLE"); ASPx.GetNodeByTagName(doc, "HEAD", 0).appendChild(styleSheet); return styleSheet.sheet; } } ASPx.currentStyleSheet = null; ASPx.GetCurrentStyleSheet = function() { if(!ASPx.currentStyleSheet) ASPx.currentStyleSheet = ASPx.CreateStyleSheetInDocument(document); return ASPx.currentStyleSheet; } function getStyleSheetRules(styleSheet){ try { return Browser.IE && Browser.Version == 8 ? styleSheet.rules : styleSheet.cssRules; } catch(e) { return null; } } ASPx.cachedCssRules = { }; ASPx.GetStyleSheetRules = function (className, stylesStorageDocument) { if(ASPx.cachedCssRules[className]) { if(ASPx.cachedCssRules[className] != ASPx.EmptyObject) return ASPx.cachedCssRules[className]; return null; } var result = iterateStyleSheetRules(stylesStorageDocument, function(rule) { if(rule.selectorText == "." + className){ ASPx.cachedCssRules[className] = rule; return rule; } }); if(ASPx.IsExists(result)) return result; ASPx.cachedCssRules[className] = ASPx.EmptyObject; return null; } function iterateStyleSheetRules(stylesStorageDocument, callback) { var doc = stylesStorageDocument || document; for(var i = 0; i < doc.styleSheets.length; i ++){ var styleSheet = doc.styleSheets[i]; var rules = getStyleSheetRules(styleSheet); if(rules != null){ for(var j = 0; j < rules.length; j ++) { var result = callback(rules[j]); if(result !== undefined) return result; } } } }; ASPx.ClearCachedCssRules = function(){ ASPx.cachedCssRules = { }; } var styleCount = 0; var styleNameCache = { }; ASPx.CreateImportantStyleRule = function(styleSheet, cssText, postfix, prefix) { styleSheet = styleSheet || ASPx.GetCurrentStyleSheet(); var cacheKey = (postfix ? postfix + "||" : "") + cssText + (prefix ? "||" + prefix : ""); if(styleNameCache[cacheKey]) return styleNameCache[cacheKey]; prefix = prefix ? prefix + " " : ""; var className = "dxh" + styleCount + (postfix ? postfix : ""); ASPx.AddStyleSheetRule(styleSheet, prefix + "." + className, ASPx.CreateImportantCssText(cssText)); styleCount++; styleNameCache[cacheKey] = className; return className; } ASPx.CreateImportantCssText = function(cssText) { var newText = ""; var attributes = cssText.split(";"); for(var i = 0; i < attributes.length; i++){ if(attributes[i] != "") newText += attributes[i] + " !important;"; } return newText; } ASPx.AddStyleSheetRule = function(styleSheet, selector, cssText){ if(!cssText) return; if(Browser.IE) styleSheet.addRule(selector, cssText); else styleSheet.insertRule(selector + " { " + cssText + " }", styleSheet.cssRules.length); } ASPx.GetPointerCursor = function() { return "pointer"; } ASPx.SetPointerCursor = function(element) { if(element.style.cursor == "") element.style.cursor = ASPx.GetPointerCursor(); } ASPx.SetElementFloat = function(element, value) { if(ASPx.IsExists(element.style.cssFloat)) element.style.cssFloat = value; else if(ASPx.IsExists(element.style.styleFloat)) element.style.styleFloat = value; else Attr.SetAttribute(element.style, "float", value); } ASPx.GetElementFloat = function(element) { var currentStyle = ASPx.GetCurrentStyle(element); if(ASPx.IsExists(currentStyle.cssFloat)) return currentStyle.cssFloat; if(ASPx.IsExists(currentStyle.styleFloat)) return currentStyle.styleFloat; return Attr.GetAttribute(currentStyle, "float"); } function getElementDirection(element) { return ASPx.GetCurrentStyle(element).direction; } ASPx.IsElementRightToLeft = function(element) { return getElementDirection(element) == "rtl"; } ASPx.AdjustVerticalMarginsInContainer = function(container) { var containerBorderAndPaddings = ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); var flowElements = [], floatElements = [], floatTextElements = []; var maxHeight = 0, maxFlowHeight = 0; for(var i = 0; i < container.childNodes.length; i++) { var element = container.childNodes[i]; if(!element.offsetHeight) continue; ASPx.ClearVerticalMargins(element); } for(var i = 0; i < container.childNodes.length; i++) { var element = container.childNodes[i]; if(!element.offsetHeight) continue; var float = ASPx.GetElementFloat(element); var isFloat = (float === "left" || float === "right"); if(isFloat) floatElements.push(element) else { flowElements.push(element); if(element.tagName !== "IMG"){ if(!ASPx.IsTextWrapped(element)) element.style.verticalAlign = 'baseline'; floatTextElements.push(element); } if(element.tagName === "DIV") Attr.ChangeStyleAttribute(element, "float", "left"); } if(element.offsetHeight > maxHeight) maxHeight = element.offsetHeight; if(!isFloat && element.offsetHeight > maxFlowHeight) maxFlowHeight = element.offsetHeight; } for(var i = 0; i < flowElements.length; i++) Attr.RestoreStyleAttribute(flowElements[i], "float"); var containerBorderAndPaddings = ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); var containerHeight = container.offsetHeight - containerBorderAndPaddings; if(maxHeight == containerHeight) { var verticalAlign = ASPx.GetCurrentStyle(container).verticalAlign; for(var i = 0; i < floatTextElements.length; i++) floatTextElements[i].style.verticalAlign = ''; containerHeight = container.offsetHeight - containerBorderAndPaddings; for(var i = 0; i < floatElements.length; i++) adjustVerticalMarginsCore(floatElements[i], containerHeight, verticalAlign, true); for(var i = 0; i < flowElements.length; i++) { if(maxFlowHeight != maxHeight) adjustVerticalMarginsCore(flowElements[i], containerHeight, verticalAlign); } } } ASPx.AdjustVerticalMargins = function(element) { ASPx.ClearVerticalMargins(element); var parentElement = element.parentNode; var parentHeight = parentElement.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(parentElement); adjustVerticalMarginsCore(element, parentHeight, ASPx.GetCurrentStyle(parentElement).verticalAlign); } function adjustVerticalMarginsCore(element, parentHeight, verticalAlign, toBottom) { var marginTop; if(verticalAlign == "top") marginTop = 0; else if(verticalAlign == "bottom") marginTop = parentHeight - element.offsetHeight; else marginTop = (parentHeight - element.offsetHeight) / 2; if(marginTop !== 0){ var marginAttr = (toBottom ? Math.ceil(marginTop) : Math.floor(marginTop)) + "px" element.style.marginTop = marginAttr; } } ASPx.ClearVerticalMargins = function(element) { element.style.marginTop = ""; element.style.marginBottom = ""; } ASPx.AdjustHeightInContainer = function(container) { var height = container.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(container); for(var i = 0; i < container.childNodes.length; i++) { var element = container.childNodes[i]; if(!element.offsetHeight) continue; ASPx.ClearHeight(element); } var elements = []; var childrenHeight = 0; for(var i = 0; i < container.childNodes.length; i++) { var element = container.childNodes[i]; if(!element.offsetHeight) continue; childrenHeight += element.offsetHeight + ASPx.GetTopBottomMargins(element); elements.push(element); } if(elements.length > 0 && childrenHeight < height) { var correctedHeight = 0; for(var i = 0; i < elements.length; i++) { var elementHeight = 0; if(i < elements.length - 1){ var elementHeight = Math.floor(height / elements.length); correctedHeight += elementHeight; } else{ var elementHeight = height - correctedHeight; if(elementHeight < 0) elementHeight = 0; } adjustHeightCore(elements[i], elementHeight); } } } ASPx.AdjustHeight = function(element) { ASPx.ClearHeight(element); var parentElement = element.parentNode; var height = parentElement.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(parentElement); adjustHeightCore(element, height); } function adjustHeightCore(element, height) { var height = height - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element); if(height < 0) height = 0; element.style.height = height + "px"; } ASPx.ClearHeight = function(element) { element.style.height = ""; } ASPx.ShrinkWrappedTextInContainer = function(container) { if(!container) return; for(var i = 0; i < container.childNodes.length; i++){ var child = container.childNodes[i]; if(child.style && ASPx.IsTextWrapped(child)) { Attr.ChangeStyleAttribute(child, "width", "1px"); child.shrinkedTextContainer = true; } } } ASPx.AdjustWrappedTextInContainer = function(container) { if(!container) return; var textContainer, leftWidth = 0, rightWidth = 0; for(var i = 0; i < container.childNodes.length; i++){ var child = container.childNodes[i]; if(child.tagName === "BR") return; if(!child.tagName) continue; if(child.tagName !== "IMG"){ textContainer = child; if(ASPx.IsTextWrapped(textContainer)){ if(!textContainer.shrinkedTextContainer) textContainer.style.width = ""; textContainer.style.marginRight = ""; } } else { if(child.offsetWidth === 0){ Evt.AttachEventToElement(child, "load", function (evt) { ASPx.AdjustWrappedTextInContainer(container); }); return; } var width = child.offsetWidth + ASPx.GetLeftRightMargins(child); if(textContainer) rightWidth += width; else leftWidth += width; } } if(textContainer && ASPx.IsTextWrapped(textContainer)) { var containerWidth = container.offsetWidth - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(container); if(textContainer.shrinkedTextContainer) { Attr.RestoreStyleAttribute(textContainer, "width"); Attr.ChangeStyleAttribute(container, "width", containerWidth + "px"); } if(textContainer.offsetWidth + leftWidth + rightWidth >= containerWidth) { if(rightWidth > 0 && !textContainer.shrinkedTextContainer) textContainer.style.width = (containerWidth - rightWidth) + "px"; else if(leftWidth > 0){ if(ASPx.IsElementRightToLeft(container)) textContainer.style.marginLeft = leftWidth + "px"; else textContainer.style.marginRight = leftWidth + "px"; } } } } ASPx.IsTextWrapped = function(element) { return element && ASPx.GetCurrentStyle(element).whiteSpace !== "nowrap"; } ASPx.IsValidPosition = function(pos){ return pos != ASPx.InvalidPosition && pos != -ASPx.InvalidPosition; } ASPx.getSpriteMainElement = function(element) { var cssClassMarker = "dx-acc"; if(ASPx.ElementContainsCssClass(element, cssClassMarker)) return element; if(element.parentNode && ASPx.ElementContainsCssClass(element.parentNode, cssClassMarker)) return element.parentNode; return element; } ASPx.GetAbsoluteX = function(curEl){ return ASPx.GetAbsolutePositionX(curEl); } ASPx.GetAbsoluteY = function(curEl){ return ASPx.GetAbsolutePositionY(curEl); } ASPx.SetAbsoluteX = function(element, x){ element.style.left = ASPx.PrepareClientPosForElement(x, element, true) + "px"; } ASPx.SetAbsoluteY = function(element, y){ element.style.top = ASPx.PrepareClientPosForElement(y, element, false) + "px"; } ASPx.GetAbsolutePositionX = function(element){ if(Browser.IE) return getAbsolutePositionX_IE(element); else if(Browser.Firefox && Browser.Version >= 3) return getAbsolutePositionX_FF3(element); else if(Browser.Opera) return getAbsolutePositionX_Opera(element); else if(Browser.NetscapeFamily && (!Browser.Firefox || Browser.Version < 3)) return getAbsolutePositionX_NS(element); else if(Browser.WebKitFamily || Browser.Edge) return getAbsolutePositionX_FF3(element); else return getAbsolutePositionX_Other(element); } function getAbsolutePositionX_Opera(curEl){ var isFirstCycle = true; var pos = getAbsoluteScrollOffset_OperaFF(curEl, true); while(curEl != null) { pos += curEl.offsetLeft; if(!isFirstCycle) pos -= curEl.scrollLeft; curEl = curEl.offsetParent; isFirstCycle = false; } pos += document.body.scrollLeft; return pos; } function getAbsolutePositionX_IE(element){ if(element == null || Browser.IE && element.parentNode == null) return 0; return element.getBoundingClientRect().left + ASPx.GetDocumentScrollLeft(); } function getAbsolutePositionX_FF3(element){ if(element == null) return 0; var x = element.getBoundingClientRect().left + ASPx.GetDocumentScrollLeft(); return Math.round(x); } function getAbsolutePositionX_NS(curEl){ var pos = getAbsoluteScrollOffset_OperaFF(curEl, true); var isFirstCycle = true; while(curEl != null) { pos += curEl.offsetLeft; if(!isFirstCycle && curEl.offsetParent != null) pos -= curEl.scrollLeft; if(!isFirstCycle && Browser.Firefox){ var style = ASPx.GetCurrentStyle(curEl); if(curEl.tagName == "DIV" && style.overflow != "visible") pos += ASPx.PxToInt(style.borderLeftWidth); } isFirstCycle = false; curEl = curEl.offsetParent; } return pos; } function getAbsolutePositionX_Safari(curEl){ var pos = getAbsoluteScrollOffset_WebKit(curEl, true); var isSafariVerNonLessThan3OrChrome = Browser.Safari && Browser.Version >= 3 || Browser.Chrome; if(curEl != null){ var isFirstCycle = true; if(isSafariVerNonLessThan3OrChrome && curEl.tagName == "TD") { pos += curEl.offsetLeft; curEl = curEl.offsetParent; isFirstCycle = false; } var hasNonStaticElement = false; while (curEl != null) { pos += curEl.offsetLeft; var style = ASPx.GetCurrentStyle(curEl); var isNonStatic = style.position !== "" && style.position !== "static"; if(isNonStatic) hasNonStaticElement = true; var safariDisplayTable = Browser.Safari && Browser.Version >= 8 && style.display === "table"; var posDiv = curEl.tagName == "DIV" && isNonStatic && !safariDisplayTable; if(!isFirstCycle && (curEl.tagName == "TD" || curEl.tagName == "TABLE" || posDiv)) pos += curEl.clientLeft; isFirstCycle = false; curEl = curEl.offsetParent; } if(!hasNonStaticElement && (document.documentElement.style.position === "" || document.documentElement.style.position === "static")) pos += document.documentElement.offsetLeft; } return pos; } function getAbsolutePositionX_Other(curEl){ var pos = 0; var isFirstCycle = true; while(curEl != null) { pos += curEl.offsetLeft; if(!isFirstCycle && curEl.offsetParent != null) pos -= curEl.scrollLeft; isFirstCycle = false; curEl = curEl.offsetParent; } return pos; } ASPx.GetAbsolutePositionY = function(element){ if(Browser.IE) return getAbsolutePositionY_IE(element); else if(Browser.Firefox && Browser.Version >= 3) return getAbsolutePositionY_FF3(element); else if(Browser.Opera) return getAbsolutePositionY_Opera(element); else if(Browser.NetscapeFamily && (!Browser.Firefox || Browser.Version < 3)) return getAbsolutePositionY_NS(element); else if(Browser.WebKitFamily || Browser.Edge) return getAbsolutePositionY_FF3(element); else return getAbsolutePositionY_Other(element); } function getAbsolutePositionY_Opera(curEl){ var isFirstCycle = true; if(curEl && curEl.tagName == "TR" && curEl.cells.length > 0) curEl = curEl.cells[0]; var pos = getAbsoluteScrollOffset_OperaFF(curEl, false); while(curEl != null) { pos += curEl.offsetTop; if(!isFirstCycle) pos -= curEl.scrollTop; curEl = curEl.offsetParent; isFirstCycle = false; } pos += document.body.scrollTop; return pos; } function getAbsolutePositionY_IE(element){ if(element == null || Browser.IE && element.parentNode == null) return 0; return element.getBoundingClientRect().top + ASPx.GetDocumentScrollTop(); } function getAbsolutePositionY_FF3(element){ if(element == null) return 0; var y = element.getBoundingClientRect().top + ASPx.GetDocumentScrollTop(); return Math.round(y); } function getAbsolutePositionY_NS(curEl){ var pos = getAbsoluteScrollOffset_OperaFF(curEl, false); var isFirstCycle = true; while(curEl != null) { pos += curEl.offsetTop; if(!isFirstCycle && curEl.offsetParent != null) pos -= curEl.scrollTop; if(!isFirstCycle && Browser.Firefox){ var style = ASPx.GetCurrentStyle(curEl); if(curEl.tagName == "DIV" && style.overflow != "visible") pos += ASPx.PxToInt(style.borderTopWidth); } isFirstCycle = false; curEl = curEl.offsetParent; } return pos; } var WebKit3TDRealInfo = { GetOffsetTop: function(tdElement){ switch(ASPx.GetCurrentStyle(tdElement).verticalAlign){ case "middle": return Math.round(tdElement.offsetTop - (tdElement.offsetHeight - tdElement.clientHeight )/2 + tdElement.clientTop); case "bottom": return tdElement.offsetTop - tdElement.offsetHeight + tdElement.clientHeight + tdElement.clientTop; } return tdElement.offsetTop; }, GetClientHeight: function(tdElement){ var valign = ASPx.GetCurrentStyle(tdElement).verticalAlign; switch(valign){ case "middle": return tdElement.clientHeight + tdElement.offsetTop * 2; case "top": return tdElement.offsetHeight - tdElement.clientTop * 2; case "bottom": return tdElement.clientHeight + tdElement.offsetTop; } return tdElement.clientHeight; } } function getAbsolutePositionY_Safari(curEl){ var pos = getAbsoluteScrollOffset_WebKit(curEl, false); var isSafariVerNonLessThan3OrChrome = Browser.Safari && Browser.Version >= 3 || Browser.Chrome; if(curEl != null){ var isFirstCycle = true; if(isSafariVerNonLessThan3OrChrome && curEl.tagName == "TD") { pos += WebKit3TDRealInfo.GetOffsetTop(curEl); curEl = curEl.offsetParent; isFirstCycle = false; } var hasNonStaticElement = false; while (curEl != null) { pos += curEl.offsetTop; var style = ASPx.GetCurrentStyle(curEl); var isNonStatic = style.position !== "" && style.position !== "static"; if(isNonStatic) hasNonStaticElement = true; var safariDisplayTable = Browser.Safari && Browser.Version >= 8 && style.display === "table"; var posDiv = curEl.tagName == "DIV" && isNonStatic && !safariDisplayTable; if(!isFirstCycle && (curEl.tagName == "TD" || curEl.tagName == "TABLE" || posDiv)) pos += curEl.clientTop; isFirstCycle = false; curEl = curEl.offsetParent; } if(!hasNonStaticElement && (document.documentElement.style.position === "" || document.documentElement.style.position === "static")) pos += document.documentElement.offsetTop; } return pos; } function getAbsoluteScrollOffset_OperaFF(curEl, isX) { var pos = 0; var isFirstCycle = true; while(curEl != null) { if(curEl.tagName == "BODY") break; var style = ASPx.GetCurrentStyle(curEl); if(style.position == "absolute") break; if(!isFirstCycle && curEl.tagName == "DIV" && (style.position == "" || style.position == "static")) pos -= isX ? curEl.scrollLeft : curEl.scrollTop; curEl = curEl.parentNode; isFirstCycle = false; } return pos; } function getAbsoluteScrollOffset_WebKit(curEl, isX) { var pos = 0; var isFirstCycle = true; var step = 0; var absoluteWasFoundAtStep = -1; var isThereFixedParent = false; while(curEl != null) { if(curEl.tagName == "BODY") break; var style = ASPx.GetCurrentStyle(curEl); var positionIsDefault = style.position == "" || style.position == "static"; var absoluteWasFoundAtPreviousStep = absoluteWasFoundAtStep >= 0 && absoluteWasFoundAtStep < step; var canHaveScrolls = curEl.tagName == "DIV" || curEl.tagName == "SECTION" || curEl.tagName == "FORM"; if(!isFirstCycle && canHaveScrolls && (!positionIsDefault || !absoluteWasFoundAtPreviousStep)) pos -= isX ? curEl.scrollLeft : curEl.scrollTop; if(style.position == "absolute") absoluteWasFoundAtStep = step; else if(style.position == "relative") absoluteWasFoundAtStep = -1; else if(style.position == "fixed") isThereFixedParent = true; curEl = curEl.parentNode; isFirstCycle = false; step ++; } if(isThereFixedParent) pos += isX ? ASPx.GetDocumentScrollLeft() : ASPx.GetDocumentScrollTop(); return pos; } function getAbsolutePositionY_Other(curEl){ var pos = 0; var isFirstCycle = true; while(curEl != null) { pos += curEl.offsetTop; if(!isFirstCycle && curEl.offsetParent != null) pos -= curEl.scrollTop; isFirstCycle = false; curEl = curEl.offsetParent; } return pos; } function createElementMock(element) { var div = document.createElement('DIV'); div.style.top = "0px"; div.style.left = "0px"; div.visibility = "hidden"; div.style.position = ASPx.GetCurrentStyle(element).position; return div; } ASPx.PrepareClientPosElementForOtherParent = function(pos, element, otherParent, isX) { if(element.parentNode == otherParent) return ASPx.PrepareClientPosForElement(pos, element, isX); var elementMock = createElementMock(element); otherParent.appendChild(elementMock); var preparedPos = ASPx.PrepareClientPosForElement(pos, elementMock, isX); otherParent.removeChild(elementMock); return preparedPos; } ASPx.PrepareClientPosForElement = function(pos, element, isX) { pos -= ASPx.GetPositionElementOffset(element, isX); return pos; } function getExperimentalPositionOffset(element, isX) { var div = createElementMock(element); if(div.style.position == "static") div.style.position = "absolute"; element.parentNode.appendChild(div); var realPos = isX ? ASPx.GetAbsoluteX(div) : ASPx.GetAbsoluteY(div); element.parentNode.removeChild(div); return Math.round(realPos); } ASPx.GetPositionElementOffset = function(element, isX) { return getExperimentalPositionOffset(element, isX); } function getPositionElementOffsetCore(element, isX) { var curEl = element.offsetParent; var offset = 0; var scroll = 0; var isThereFixedParent = false; var isFixed = false; var hasDisplayTableParent = false; var position = ""; while(curEl != null) { var tagName = curEl.tagName; if(tagName == "HTML"){ break; } if(tagName == "BODY"){ if(!Browser.Opera && !Browser.Chrome && !Browser.Edge){ var style = ASPx.GetCurrentStyle(curEl); if(style.position != "" && style.position != "static"){ offset += ASPx.PxToInt(isX ? style.left : style.top); offset += ASPx.PxToInt(isX ? style.marginLeft : style.marginTop); } } break; } var style = ASPx.GetCurrentStyle(curEl); isFixed = style.position == "fixed"; if(isFixed) { isThereFixedParent = true; if(Browser.IE) return getExperimentalPositionOffset(element, isX); } hasDisplayTableParent = style.display == "table" && (style.position == "absolute" || style.position == "relative"); if(hasDisplayTableParent && Browser.IE) return getExperimentalPositionOffset(element, isX); if(style.position == "absolute" || isFixed || style.position == "relative") { offset += isX ? curEl.offsetLeft : curEl.offsetTop; offset += ASPx.PxToInt(isX ? style.borderLeftWidth : style.borderTopWidth); } if(style.position == "relative") scroll += getElementChainScroll(curEl, curEl.offsetParent, isX); scroll += isX ? curEl.scrollLeft : curEl.scrollTop; curEl = curEl.offsetParent; } offset -= scroll; if((Browser.IE || Browser.Firefox && Browser.Version >= 3 || Browser.WebKitFamily || Browser.Edge) && isThereFixedParent) offset += isX ? ASPx.GetDocumentScrollLeft() : ASPx.GetDocumentScrollTop(); return offset; } function getElementChainScroll(startElement, endElement, isX){ var curEl = startElement.parentNode; var scroll = 0; while(curEl != endElement){ scroll += isX ? curEl.scrollLeft : curEl.scrollTop; curEl = curEl.parentNode; } return scroll; } ASPx.GetSizeOfText = function(text, textCss) { var testContainer = document.createElement("tester"); var defaultLineHeight = ASPx.Browser.Firefox ? "1" : ""; testContainer.style.fontSize = textCss.fontSize; testContainer.style.fontFamily = textCss.fontFamily; testContainer.style.fontWeight = textCss.fontWeight; testContainer.style.letterSpacing = textCss.letterSpacing; testContainer.style.lineHeight = textCss.lineHeight || defaultLineHeight; testContainer.style.position = "absolute"; testContainer.style.top = ASPx.InvalidPosition + "px"; testContainer.style.left = ASPx.InvalidPosition + "px"; testContainer.style.width = "auto"; testContainer.style.whiteSpace = "nowrap"; testContainer.appendChild(document.createTextNode(text)); var testElement = document.body.appendChild(testContainer); var size = { "width": testElement.offsetWidth, "height": testElement.offsetHeight }; document.body.removeChild(testElement); return size; } ASPx.PointToPixel = function(points, addPx) { var result = 0; try { var indexOfPt = points.toLowerCase().indexOf("pt"); if(indexOfPt > -1) result = parseInt(points.substr(0, indexOfPt)) * 96 / 72; else result = parseInt(points) * 96 / 72; if(addPx) result = result + "px"; } catch(e) {} return result; } ASPx.PixelToPoint = function(pixels, addPt) { var result = 0; try { var indexOfPx = pixels.toLowerCase().indexOf("px"); if(indexOfPx > -1) result = parseInt(pixels.substr(0, indexOfPx)) * 72 / 96; else result = parseInt(pixels) * 72 / 96; if(addPt) result = result + "pt"; } catch(e) {} return result; } ASPx.PxToInt = function(px) { return pxToNumber(px, parseInt); } ASPx.PxToFloat = function(px) { return pxToNumber(px, parseFloat); } function pxToNumber(px, parseFunction) { var result = 0; if(px != null && px != "") { try { var indexOfPx = px.indexOf("px"); if(indexOfPx > -1) result = parseFunction(px.substr(0, indexOfPx)); } catch(e) { } } return result; } ASPx.PercentageToFloat = function(perc) { var result = 0; if(perc != null && perc != "") { try { var indexOfPerc = perc.indexOf("%"); if(indexOfPerc > -1) result = parseFloat(perc.substr(0, indexOfPerc)) / 100; } catch(e) { } } return result; } ASPx.CreateGuid = function() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8; return v.toString(16); }); } ASPx.GetLeftRightBordersAndPaddingsSummaryValue = function(element, currentStyle) { return ASPx.GetLeftRightPaddings(element, currentStyle) + ASPx.GetHorizontalBordersWidth(element, currentStyle); } ASPx.GetTopBottomBordersAndPaddingsSummaryValue = function(element, currentStyle) { return ASPx.GetTopBottomPaddings(element, currentStyle) + ASPx.GetVerticalBordersWidth(element, currentStyle); } ASPx.GetVerticalBordersWidth = function(element, style) { if(!ASPx.IsExists(style)) style = (Browser.IE && Browser.MajorVersion != 9 && window.getComputedStyle) ? window.getComputedStyle(element) : ASPx.GetCurrentStyle(element); var res = 0; if(style.borderTopStyle != "none") { res += ASPx.PxToFloat(style.borderTopWidth); if(Browser.IE && Browser.MajorVersion < 9) res += getIe8BorderWidthFromText(style.borderTopWidth); } if(style.borderBottomStyle != "none") { res += ASPx.PxToFloat(style.borderBottomWidth); if(Browser.IE && Browser.MajorVersion < 9) res += getIe8BorderWidthFromText(style.borderBottomWidth); } return res; } ASPx.GetHorizontalBordersWidth = function(element, style) { if(!ASPx.IsExists(style)) style = (Browser.IE && window.getComputedStyle) ? window.getComputedStyle(element) : ASPx.GetCurrentStyle(element); var res = 0; if(style.borderLeftStyle != "none") { res += ASPx.PxToFloat(style.borderLeftWidth); if(Browser.IE && Browser.MajorVersion < 9) res += getIe8BorderWidthFromText(style.borderLeftWidth); } if(style.borderRightStyle != "none") { res += ASPx.PxToFloat(style.borderRightWidth); if(Browser.IE && Browser.MajorVersion < 9) res += getIe8BorderWidthFromText(style.borderRightWidth); } return res; } function getIe8BorderWidthFromText(textWidth) { var availableWidth = { "thin": 1, "medium" : 3, "thick": 5 }; var width = availableWidth[textWidth]; return width ? width : 0; } ASPx.GetTopBottomPaddings = function(element, style) { var currentStyle = style ? style : ASPx.GetCurrentStyle(element); return ASPx.PxToInt(currentStyle.paddingTop) + ASPx.PxToInt(currentStyle.paddingBottom); } ASPx.GetLeftRightPaddings = function(element, style) { var currentStyle = style ? style : ASPx.GetCurrentStyle(element); return ASPx.PxToInt(currentStyle.paddingLeft) + ASPx.PxToInt(currentStyle.paddingRight); } ASPx.GetTopBottomMargins = function(element, style) { var currentStyle = style ? style : ASPx.GetCurrentStyle(element); return ASPx.PxToInt(currentStyle.marginTop) + ASPx.PxToInt(currentStyle.marginBottom); } ASPx.GetLeftRightMargins = function(element, style) { var currentStyle = style ? style : ASPx.GetCurrentStyle(element); return ASPx.PxToInt(currentStyle.marginLeft) + ASPx.PxToInt(currentStyle.marginRight); } ASPx.GetClearClientWidth = function(element) { return element.offsetWidth - ASPx.GetLeftRightBordersAndPaddingsSummaryValue(element); } ASPx.GetClearClientHeight = function(element) { return element.offsetHeight - ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element); } ASPx.SetOffsetWidth = function(element, widthValue, currentStyle) { if(!ASPx.IsExists(currentStyle)) currentStyle = ASPx.GetCurrentStyle(element); var value = widthValue - ASPx.PxToInt(currentStyle.marginLeft) - ASPx.PxToInt(currentStyle.marginRight); value -= ASPx.GetLeftRightBordersAndPaddingsSummaryValue(element, currentStyle); if(value > -1) element.style.width = value + "px"; } ASPx.SetOffsetHeight = function(element, heightValue, currentStyle) { if(!ASPx.IsExists(currentStyle)) currentStyle = ASPx.GetCurrentStyle(element); var value = heightValue - ASPx.PxToInt(currentStyle.marginTop) - ASPx.PxToInt(currentStyle.marginBottom); value -= ASPx.GetTopBottomBordersAndPaddingsSummaryValue(element, currentStyle); if(value > -1) element.style.height = value + "px"; } ASPx.FindOffsetParent = function(element) { var currentElement = element.parentNode; while(ASPx.IsExistsElement(currentElement) && currentElement.tagName != "BODY") { if(currentElement.offsetWidth > 0 && currentElement.offsetHeight > 0) return currentElement; currentElement = currentElement.parentNode; } return document.body; } ASPx.GetDocumentScrollTop = function(){ var isScrollBodyIE = Browser.IE && ASPx.GetCurrentStyle(document.body).overflow == "hidden" && document.body.scrollTop > 0; if(Browser.WebKitFamily || Browser.Edge || isScrollBodyIE) { if(Browser.MacOSMobilePlatform) return window.pageYOffset; else return document.body.scrollTop; } else return document.documentElement.scrollTop; } ASPx.SetDocumentScrollTop = function(scrollTop) { if(Browser.WebKitFamily || Browser.Edge) { if(Browser.MacOSMobilePlatform) window.pageYOffset = scrollTop; else document.body.scrollTop = scrollTop; } else document.documentElement.scrollTop = scrollTop; } ASPx.GetDocumentScrollLeft = function(){ var isScrollBodyIE = Browser.IE && ASPx.GetCurrentStyle(document.body).overflow == "hidden" && document.body.scrollLeft > 0; if(Browser.WebKitFamily || Browser.Edge || isScrollBodyIE || Browser.Opera) return document.body.scrollLeft; return document.documentElement.scrollLeft; } ASPx.SetDocumentScrollLeft = function(scrollLeft) { if(Browser.WebKitFamily || Browser.Edge) { if(Browser.MacOSMobilePlatform) window.pageXOffset = scrollLeft; else document.body.scrollLeft = scrollLeft; } else document.documentElement.scrollLeft = scrollLeft; } ASPx.GetDocumentClientWidth = function(){ if(document.documentElement.clientWidth == 0) return document.body.clientWidth; else return document.documentElement.clientWidth; } ASPx.GetDocumentClientHeight = function() { if(Browser.Firefox && window.innerHeight - document.documentElement.clientHeight > ASPx.GetVerticalScrollBarWidth()) { return window.innerHeight; } else if(Browser.Opera && Browser.Version < 9.6 || document.documentElement.clientHeight == 0) { return document.body.clientHeight } return document.documentElement.clientHeight; } ASPx.GetDocumentWidth = function(){ var bodyWidth = document.body.offsetWidth; var docWidth = Browser.IE ? document.documentElement.clientWidth : document.documentElement.offsetWidth; var bodyScrollWidth = document.body.scrollWidth; var docScrollWidth = document.documentElement.scrollWidth; return getMaxDimensionOf(bodyWidth, docWidth, bodyScrollWidth, docScrollWidth); } ASPx.GetDocumentHeight = function(){ var bodyHeight = document.body.offsetHeight; var docHeight = Browser.IE ? document.documentElement.clientHeight : document.documentElement.offsetHeight; var bodyScrollHeight = document.body.scrollHeight; var docScrollHeight = document.documentElement.scrollHeight; var maxHeight = getMaxDimensionOf(bodyHeight, docHeight, bodyScrollHeight, docScrollHeight); if(Browser.Opera && Browser.Version >= 9.6){ if(Browser.Version < 10) maxHeight = getMaxDimensionOf(bodyHeight, docHeight, bodyScrollHeight); var visibleHeightOfDocument = document.documentElement.clientHeight; if(maxHeight > visibleHeightOfDocument) maxHeight = getMaxDimensionOf(window.outerHeight, maxHeight); else maxHeight = document.documentElement.clientHeight; return maxHeight; } return maxHeight; } ASPx.GetDocumentMaxClientWidth = function(){ var bodyWidth = document.body.offsetWidth; var docWidth = document.documentElement.offsetWidth; var docClientWidth = document.documentElement.clientWidth; return getMaxDimensionOf(bodyWidth, docWidth, docClientWidth); } ASPx.GetDocumentMaxClientHeight = function(){ var bodyHeight = document.body.offsetHeight; var docHeight = document.documentElement.offsetHeight; var docClientHeight = document.documentElement.clientHeight; return getMaxDimensionOf(bodyHeight, docHeight, docClientHeight); } ASPx.verticalScrollIsNotHidden = null; ASPx.horizontalScrollIsNotHidden = null; ASPx.GetVerticalScrollIsNotHidden = function() { if(!ASPx.IsExists(ASPx.verticalScrollIsNotHidden)) ASPx.verticalScrollIsNotHidden = ASPx.GetCurrentStyle(document.body).overflowY !== "hidden" && ASPx.GetCurrentStyle(document.documentElement).overflowY !== "hidden"; return ASPx.verticalScrollIsNotHidden; } ASPx.GetHorizontalScrollIsNotHidden = function() { if(!ASPx.IsExists(ASPx.horizontalScrollIsNotHidden)) ASPx.horizontalScrollIsNotHidden = ASPx.GetCurrentStyle(document.body).overflowX !== "hidden" && ASPx.GetCurrentStyle(document.documentElement).overflowX !== "hidden"; return ASPx.horizontalScrollIsNotHidden; } ASPx.GetCurrentDocumentWidth = function() { var result = ASPx.GetDocumentClientWidth(); if(!ASPx.Browser.Safari && ASPx.GetVerticalScrollIsNotHidden() && ASPx.GetDocumentHeight() > ASPx.GetDocumentClientHeight()) result += ASPx.GetVerticalScrollBarWidth(); return result; } ASPx.GetCurrentDocumentHeight = function() { var result = ASPx.GetDocumentClientHeight(); if(!ASPx.Browser.Safari && ASPx.GetHorizontalScrollIsNotHidden() && ASPx.GetDocumentWidth() > ASPx.GetDocumentClientWidth()) result += ASPx.GetVerticalScrollBarWidth(); return result; } function getMaxDimensionOf(){ var max = ASPx.InvalidDimension; for(var i = 0; i < arguments.length; i++){ if(max < arguments[i]) max = arguments[i]; } return max; } ASPx.GetClientLeft = function(element){ return ASPx.IsExists(element.clientLeft) ? element.clientLeft : (element.offsetWidth - element.clientWidth) / 2; } ASPx.GetClientTop = function(element){ return ASPx.IsExists(element.clientTop) ? element.clientTop : (element.offsetHeight - element.clientHeight) / 2; } ASPx.SetStyles = function(element, styles, makeImportant) { if(ASPx.IsExists(styles.cssText)) element.style.cssText = styles.cssText; if(ASPx.IsExists(styles.className)) element.className = styles.className; for(var property in styles) { if(!styles.hasOwnProperty(property)) continue; var value = styles[property]; switch (property) { case "cssText": case "className": break; case "float": ASPx.SetElementFloat(element, value); break; case "opacity": ASPx.SetElementOpacity(element, value); break; case "zIndex": ASPx.SetStylesCore(element, property, value, makeImportant); break; case "fontWeight": if(ASPx.Browser.IE && ASPx.Browser.Version < 9 && typeof(styles[property]) == "number") value = styles[property].toString(); default: ASPx.SetStylesCore(element, property, value + (typeof (value) == "number" ? "px" : ""), makeImportant); } } } ASPx.SetStylesCore = function(element, property, value, makeImportant) { if(makeImportant) { var index = property.search("[A-Z]"); if(index != -1) property = property.replace(property.charAt(index), "-" + property.charAt(index).toLowerCase()); if(element.style.setProperty) element.style.setProperty(property, value, "important"); else element.style.cssText += ";" + property + ":" + value + "!important"; } else element.style[property] = value; } ASPx.RemoveBordersAndShadows = function(el) { if(!el || !el.style) return; el.style.borderWidth = 0; if(ASPx.IsExists(el.style.boxShadow)) el.style.boxShadow = "none"; else if(ASPx.IsExists(el.style.MozBoxShadow)) el.style.MozBoxShadow = "none"; else if(ASPx.IsExists(el.style.webkitBoxShadow)) el.style.webkitBoxShadow = "none"; } ASPx.GetCellSpacing = function(element) { var val = parseInt(element.cellSpacing); if(!isNaN(val)) return val; val = parseInt(ASPx.GetCurrentStyle(element).borderSpacing); if(!isNaN(val)) return val; return 0; } ASPx.GetInnerScrollPositions = function(element) { var scrolls = []; getInnerScrollPositionsCore(element, scrolls); return scrolls; } function getInnerScrollPositionsCore(element, scrolls) { for(var child = element.firstChild; child; child = child.nextSibling) { var scrollTop = child.scrollTop, scrollLeft = child.scrollLeft; if(scrollTop > 0 || scrollLeft > 0) scrolls.push([child, scrollTop, scrollLeft]); getInnerScrollPositionsCore(child, scrolls); } } ASPx.RestoreInnerScrollPositions = function(scrolls) { for(var i = 0, scrollArr; scrollArr = scrolls[i]; i++) { if(scrollArr[1] > 0) scrollArr[0].scrollTop = scrollArr[1]; if(scrollArr[2] > 0) scrollArr[0].scrollLeft = scrollArr[2]; } } ASPx.GetOuterScrollPosition = function(element) { while(element.tagName !== "BODY") { var scrollTop = element.scrollTop, scrollLeft = element.scrollLeft; if(scrollTop > 0 || scrollLeft > 0) { return { scrollTop: scrollTop, scrollLeft: scrollLeft, element: element }; } element = element.parentNode; } return { scrollTop: ASPx.GetDocumentScrollTop(), scrollLeft: ASPx.GetDocumentScrollLeft() }; } ASPx.RestoreOuterScrollPosition = function(scrollInfo) { if(scrollInfo.element) { if(scrollInfo.scrollTop > 0) scrollInfo.element.scrollTop = scrollInfo.scrollTop; if(scrollInfo.scrollLeft > 0) scrollInfo.element.scrollLeft = scrollInfo.scrollLeft; } else { if(scrollInfo.scrollTop > 0) ASPx.SetDocumentScrollTop(scrollInfo.scrollTop); if(scrollInfo.scrollLeft > 0) ASPx.SetDocumentScrollLeft(scrollInfo.scrollLeft); } } ASPx.ChangeElementContainer = function(element, container, savePreviousContainer) { if(element.parentNode != container) { var parentNode = element.parentNode; parentNode.removeChild(element); container.appendChild(element); if(savePreviousContainer) element.previousContainer = parentNode; } } ASPx.RestoreElementContainer = function(element) { if(element.previousContainer) { ASPx.ChangeElementContainer(element, element.previousContainer, false); element.previousContainer = null; } } ASPx.MoveChildrenToElement = function(sourceElement, destinationElement){ while(sourceElement.childNodes.length > 0) destinationElement.appendChild(sourceElement.childNodes[0]); } ASPx.GetScriptCode = function(script) { var useFirstChildElement = Browser.Chrome && Browser.Version < 11 || Browser.Safari && Browser.Version < 5; var text = useFirstChildElement ? script.firstChild.data : script.text; var comment = "