//----------------------------------------------------------------------- // Copyright (C) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------- // MicrosoftAjaxCore.js // Microsoft AJAX Framework Core Type System and Extensions. Function.__typeName = 'Function'; Function.__class = true; Function.createCallback = function Function$createCallback(method, context) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "method", type: Function}, {name: "context", mayBeNull: true} ]); if (e) throw e; return function() { var l = arguments.length; if (l > 0) { var args = []; for (var i = 0; i < l; i++) { args[i] = arguments[i]; } args[l] = context; return method.apply(this, args); } return method.call(this, context); } } Function.createDelegate = function Function$createDelegate(instance, method) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "instance", mayBeNull: true}, {name: "method", type: Function} ]); if (e) throw e; return function() { return method.apply(instance, arguments); } } Function.emptyFunction = Function.emptyMethod = function Function$emptyMethod() { /// } Function.validateParameters = function Function$validateParameters(parameters, expectedParameters, validateParameterCount) { /// /// /// /// /// var e = Function._validateParams(arguments, [ {name: "parameters"}, {name: "expectedParameters"}, {name: "validateParameterCount", type: Boolean, optional: true} ]); if (e) throw e; return Function._validateParams(parameters, expectedParameters, validateParameterCount); } Function._validateParams = function Function$_validateParams(params, expectedParams, validateParameterCount) { var e, expectedLength = expectedParams.length; validateParameterCount = validateParameterCount || (typeof(validateParameterCount) === "undefined"); e = Function._validateParameterCount(params, expectedParams, validateParameterCount); if (e) { e.popStackFrame(); return e; } for (var i = 0, l = params.length; i < l; i++) { var expectedParam = expectedParams[Math.min(i, expectedLength - 1)], paramName = expectedParam.name; if (expectedParam.parameterArray) { paramName += "[" + (i - expectedLength + 1) + "]"; } else if (!validateParameterCount && (i >= expectedLength)) { break; } e = Function._validateParameter(params[i], expectedParam, paramName); if (e) { e.popStackFrame(); return e; } } return null; } Function._validateParameterCount = function Function$_validateParameterCount(params, expectedParams, validateParameterCount) { var i, error, expectedLen = expectedParams.length, actualLen = params.length; if (actualLen < expectedLen) { var minParams = expectedLen; for (i = 0; i < expectedLen; i++) { var param = expectedParams[i]; if (param.optional || param.parameterArray) { minParams--; } } if (actualLen < minParams) { error = true; } } else if (validateParameterCount && (actualLen > expectedLen)) { error = true; for (i = 0; i < expectedLen; i++) { if (expectedParams[i].parameterArray) { error = false; break; } } } if (error) { var e = Error.parameterCount(); e.popStackFrame(); return e; } return null; } Function._validateParameter = function Function$_validateParameter(param, expectedParam, paramName) { var e, expectedType = expectedParam.type, expectedInteger = !!expectedParam.integer, expectedDomElement = !!expectedParam.domElement, mayBeNull = !!expectedParam.mayBeNull; e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName); if (e) { e.popStackFrame(); return e; } var expectedElementType = expectedParam.elementType, elementMayBeNull = !!expectedParam.elementMayBeNull; if (expectedType === Array && typeof(param) !== "undefined" && param !== null && (expectedElementType || !elementMayBeNull)) { var expectedElementInteger = !!expectedParam.elementInteger, expectedElementDomElement = !!expectedParam.elementDomElement; for (var i=0; i < param.length; i++) { var elem = param[i]; e = Function._validateParameterType(elem, expectedElementType, expectedElementInteger, expectedElementDomElement, elementMayBeNull, paramName + "[" + i + "]"); if (e) { e.popStackFrame(); return e; } } } return null; } Function._validateParameterType = function Function$_validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) { var e, i; if (typeof(param) === "undefined") { if (mayBeNull) { return null; } else { e = Error.argumentUndefined(paramName); e.popStackFrame(); return e; } } if (param === null) { if (mayBeNull) { return null; } else { e = Error.argumentNull(paramName); e.popStackFrame(); return e; } } if (expectedType && expectedType.__enum) { if (typeof(param) !== 'number') { e = Error.argumentType(paramName, Object.getType(param), expectedType); e.popStackFrame(); return e; } if ((param % 1) === 0) { var values = expectedType.prototype; if (!expectedType.__flags || (param === 0)) { for (i in values) { if (values[i] === param) return null; } } else { var v = param; for (i in values) { var vali = values[i]; if (vali === 0) continue; if ((vali & param) === vali) { v -= vali; } if (v === 0) return null; } } } e = Error.argumentOutOfRange(paramName, param, String.format(Sys.Res.enumInvalidValue, param, expectedType.getName())); e.popStackFrame(); return e; } if (expectedDomElement && (!Sys._isDomElement(param) || (param.nodeType === 3))) { e = Error.argument(paramName, Sys.Res.argumentDomElement); e.popStackFrame(); return e; } if (expectedType && !Sys._isInstanceOfType(expectedType, param)) { e = Error.argumentType(paramName, Object.getType(param), expectedType); e.popStackFrame(); return e; } if (expectedType === Number && expectedInteger) { if ((param % 1) !== 0) { e = Error.argumentOutOfRange(paramName, param, Sys.Res.argumentInteger); e.popStackFrame(); return e; } } return null; } Error.__typeName = 'Error'; Error.__class = true; Error.create = function Error$create(message, errorInfo) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true}, {name: "errorInfo", mayBeNull: true, optional: true} ]); if (e) throw e; var err = new Error(message); err.message = message; if (errorInfo) { for (var v in errorInfo) { err[v] = errorInfo[v]; } } err.popStackFrame(); return err; } Error.argument = function Error$argument(paramName, message) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.ArgumentException: " + (message ? message : Sys.Res.argument); if (paramName) { displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); } var err = Error.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName }); err.popStackFrame(); return err; } Error.argumentNull = function Error$argumentNull(paramName, message) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.ArgumentNullException: " + (message ? message : Sys.Res.argumentNull); if (paramName) { displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); } var err = Error.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName }); err.popStackFrame(); return err; } Error.argumentOutOfRange = function Error$argumentOutOfRange(paramName, actualValue, message) { /// /// /// /// /// var e = Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: true}, {name: "actualValue", mayBeNull: true, optional: true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : Sys.Res.argumentOutOfRange); if (paramName) { displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); } if (typeof(actualValue) !== "undefined" && actualValue !== null) { displayMessage += "\n" + String.format(Sys.Res.actualValue, actualValue); } var err = Error.create(displayMessage, { name: "Sys.ArgumentOutOfRangeException", paramName: paramName, actualValue: actualValue }); err.popStackFrame(); return err; } Error.argumentType = function Error$argumentType(paramName, actualType, expectedType, message) { /// /// /// /// /// /// var e = Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: true}, {name: "actualType", type: Type, mayBeNull: true, optional: true}, {name: "expectedType", type: Type, mayBeNull: true, optional: true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.ArgumentTypeException: "; if (message) { displayMessage += message; } else if (actualType && expectedType) { displayMessage += String.format(Sys.Res.argumentTypeWithTypes, actualType.getName(), expectedType.getName()); } else { displayMessage += Sys.Res.argumentType; } if (paramName) { displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); } var err = Error.create(displayMessage, { name: "Sys.ArgumentTypeException", paramName: paramName, actualType: actualType, expectedType: expectedType }); err.popStackFrame(); return err; } Error.argumentUndefined = function Error$argumentUndefined(paramName, message) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "paramName", type: String, mayBeNull: true, optional: true}, {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : Sys.Res.argumentUndefined); if (paramName) { displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); } var err = Error.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName }); err.popStackFrame(); return err; } Error.format = function Error$format(message) { /// /// /// var e = Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.FormatException: " + (message ? message : Sys.Res.format); var err = Error.create(displayMessage, {name: 'Sys.FormatException'}); err.popStackFrame(); return err; } Error.invalidOperation = function Error$invalidOperation(message) { /// /// /// var e = Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.InvalidOperationException: " + (message ? message : Sys.Res.invalidOperation); var err = Error.create(displayMessage, {name: 'Sys.InvalidOperationException'}); err.popStackFrame(); return err; } Error.notImplemented = function Error$notImplemented(message) { /// /// /// var e = Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.NotImplementedException: " + (message ? message : Sys.Res.notImplemented); var err = Error.create(displayMessage, {name: 'Sys.NotImplementedException'}); err.popStackFrame(); return err; } Error.parameterCount = function Error$parameterCount(message) { /// /// /// var e = Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var displayMessage = "Sys.ParameterCountException: " + (message ? message : Sys.Res.parameterCount); var err = Error.create(displayMessage, {name: 'Sys.ParameterCountException'}); err.popStackFrame(); return err; } Error.prototype.popStackFrame = function Error$popStackFrame() { /// if (arguments.length !== 0) throw Error.parameterCount(); if (typeof(this.stack) === "undefined" || this.stack === null || typeof(this.fileName) === "undefined" || this.fileName === null || typeof(this.lineNumber) === "undefined" || this.lineNumber === null) { return; } var stackFrames = this.stack.split("\n"); var currentFrame = stackFrames[0]; var pattern = this.fileName + ":" + this.lineNumber; while(typeof(currentFrame) !== "undefined" && currentFrame !== null && currentFrame.indexOf(pattern) === -1) { stackFrames.shift(); currentFrame = stackFrames[0]; } var nextFrame = stackFrames[1]; if (typeof(nextFrame) === "undefined" || nextFrame === null) { return; } var nextFrameParts = nextFrame.match(/@(.*):(\d+)$/); if (typeof(nextFrameParts) === "undefined" || nextFrameParts === null) { return; } this.fileName = nextFrameParts[1]; this.lineNumber = parseInt(nextFrameParts[2]); stackFrames.shift(); this.stack = stackFrames.join("\n"); } Object.__typeName = 'Object'; Object.__class = true; Object.getType = function Object$getType(instance) { /// /// /// var e = Function._validateParams(arguments, [ {name: "instance"} ]); if (e) throw e; var ctor = instance.constructor; if (!ctor || (typeof(ctor) !== "function") || !ctor.__typeName || (ctor.__typeName === 'Object')) { return Object; } return ctor; } Object.getTypeName = function Object$getTypeName(instance) { /// /// /// var e = Function._validateParams(arguments, [ {name: "instance"} ]); if (e) throw e; return Object.getType(instance).getName(); } String.__typeName = 'String'; String.__class = true; String.prototype.endsWith = function String$endsWith(suffix) { /// /// /// var e = Function._validateParams(arguments, [ {name: "suffix", type: String} ]); if (e) throw e; return (this.substr(this.length - suffix.length) === suffix); } String.prototype.startsWith = function String$startsWith(prefix) { /// /// /// var e = Function._validateParams(arguments, [ {name: "prefix", type: String} ]); if (e) throw e; return (this.substr(0, prefix.length) === prefix); } String.prototype.trim = function String$trim() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); return this.replace(/^\s+|\s+$/g, ''); } String.prototype.trimEnd = function String$trimEnd() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); return this.replace(/\s+$/, ''); } String.prototype.trimStart = function String$trimStart() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); return this.replace(/^\s+/, ''); } String.format = function String$format(format, args) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "format", type: String}, {name: "args", mayBeNull: true, parameterArray: true} ]); if (e) throw e; return String._toFormattedString(false, arguments); } String._toFormattedString = function String$_toFormattedString(useLocale, args) { var result = ''; var format = args[0]; for (var i=0;;) { var open = format.indexOf('{', i); var close = format.indexOf('}', i); if ((open < 0) && (close < 0)) { result += format.slice(i); break; } if ((close > 0) && ((close < open) || (open < 0))) { if (format.charAt(close + 1) !== '}') { throw Error.argument('format', Sys.Res.stringFormatBraceMismatch); } result += format.slice(i, close + 1); i = close + 2; continue; } result += format.slice(i, open); i = open + 1; if (format.charAt(i) === '{') { result += '{'; i++; continue; } if (close < 0) throw Error.argument('format', Sys.Res.stringFormatBraceMismatch); var brace = format.substring(i, close); var colonIndex = brace.indexOf(':'); var argNumber = parseInt((colonIndex < 0)? brace : brace.substring(0, colonIndex), 10) + 1; if (isNaN(argNumber)) throw Error.argument('format', Sys.Res.stringFormatInvalid); var argFormat = (colonIndex < 0)? '' : brace.substring(colonIndex + 1); var arg = args[argNumber]; if (typeof(arg) === "undefined" || arg === null) { arg = ''; } if (arg.toFormattedString) { result += arg.toFormattedString(argFormat); } else if (useLocale && arg.localeFormat) { result += arg.localeFormat(argFormat); } else if (arg.format) { result += arg.format(argFormat); } else result += arg.toString(); i = close + 1; } return result; } Boolean.__typeName = 'Boolean'; Boolean.__class = true; Boolean.parse = function Boolean$parse(value) { /// /// /// var e = Function._validateParams(arguments, [ {name: "value", type: String} ], false); if (e) throw e; var v = value.trim().toLowerCase(); if (v === 'false') return false; if (v === 'true') return true; throw Error.argumentOutOfRange('value', value, Sys.Res.boolTrueOrFalse); } Date.__typeName = 'Date'; Date.__class = true; Number.__typeName = 'Number'; Number.__class = true; RegExp.__typeName = 'RegExp'; RegExp.__class = true; if (!window) this.window = this; window.Type = Function; Type.__fullyQualifiedIdentifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]([^ \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*[^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\])?$", "i"); Type.__identifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\][^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*$", "i"); Type.prototype.callBaseMethod = function Type$callBaseMethod(instance, name, baseArguments) { /// /// /// /// /// var e = Function._validateParams(arguments, [ {name: "instance"}, {name: "name", type: String}, {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true} ]); if (e) throw e; var baseMethod = Sys._getBaseMethod(this, instance, name); if (!baseMethod) throw Error.invalidOperation(String.format(Sys.Res.methodNotFound, name)); if (!baseArguments) { return baseMethod.apply(instance); } else { return baseMethod.apply(instance, baseArguments); } } Type.prototype.getBaseMethod = function Type$getBaseMethod(instance, name) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "instance"}, {name: "name", type: String} ]); if (e) throw e; return Sys._getBaseMethod(this, instance, name); } Type.prototype.getBaseType = function Type$getBaseType() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); return (typeof(this.__baseType) === "undefined") ? null : this.__baseType; } Type.prototype.getInterfaces = function Type$getInterfaces() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); var result = []; var type = this; while(type) { var interfaces = type.__interfaces; if (interfaces) { for (var i = 0, l = interfaces.length; i < l; i++) { var interfaceType = interfaces[i]; if (!Array.contains(result, interfaceType)) { result[result.length] = interfaceType; } } } type = type.__baseType; } return result; } Type.prototype.getName = function Type$getName() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); return (typeof(this.__typeName) === "undefined") ? "" : this.__typeName; } Type.prototype.implementsInterface = function Type$implementsInterface(interfaceType) { /// /// /// var e = Function._validateParams(arguments, [ {name: "interfaceType", type: Type} ]); if (e) throw e; this.resolveInheritance(); var interfaceName = interfaceType.getName(); var cache = this.__interfaceCache; if (cache) { var cacheEntry = cache[interfaceName]; if (typeof(cacheEntry) !== 'undefined') return cacheEntry; } else { cache = this.__interfaceCache = {}; } var baseType = this; while (baseType) { var interfaces = baseType.__interfaces; if (interfaces) { if (Array.indexOf(interfaces, interfaceType) !== -1) { return cache[interfaceName] = true; } } baseType = baseType.__baseType; } return cache[interfaceName] = false; } Type.prototype.inheritsFrom = function Type$inheritsFrom(parentType) { /// /// /// var e = Function._validateParams(arguments, [ {name: "parentType", type: Type} ]); if (e) throw e; this.resolveInheritance(); var baseType = this.__baseType; while (baseType) { if (baseType === parentType) { return true; } baseType = baseType.__baseType; } return false; } Type.prototype.initializeBase = function Type$initializeBase(instance, baseArguments) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "instance"}, {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true} ]); if (e) throw e; if (!Sys._isInstanceOfType(this, instance)) throw Error.argumentType('instance', Object.getType(instance), this); this.resolveInheritance(); if (this.__baseType) { if (!baseArguments) { this.__baseType.apply(instance); } else { this.__baseType.apply(instance, baseArguments); } } return instance; } Type.prototype.isImplementedBy = function Type$isImplementedBy(instance) { /// /// /// var e = Function._validateParams(arguments, [ {name: "instance", mayBeNull: true} ]); if (e) throw e; if (typeof(instance) === "undefined" || instance === null) return false; var instanceType = Object.getType(instance); return !!(instanceType.implementsInterface && instanceType.implementsInterface(this)); } Type.prototype.isInstanceOfType = function Type$isInstanceOfType(instance) { /// /// /// var e = Function._validateParams(arguments, [ {name: "instance", mayBeNull: true} ]); if (e) throw e; return Sys._isInstanceOfType(this, instance); } Type.prototype.registerClass = function Type$registerClass(typeName, baseType, interfaceTypes) { /// /// /// /// /// var e = Function._validateParams(arguments, [ {name: "typeName", type: String}, {name: "baseType", type: Type, mayBeNull: true, optional: true}, {name: "interfaceTypes", type: Type, parameterArray: true} ]); if (e) throw e; if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName); var parsedName; try { parsedName = eval(typeName); } catch(e) { throw Error.argument('typeName', Sys.Res.argumentTypeName); } if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName); if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName)); if ((arguments.length > 1) && (typeof(baseType) === 'undefined')) throw Error.argumentUndefined('baseType'); if (baseType && !baseType.__class) throw Error.argument('baseType', Sys.Res.baseNotAClass); this.prototype.constructor = this; this.__typeName = typeName; this.__class = true; if (baseType) { this.__baseType = baseType; this.__basePrototypePending = true; } Sys.__upperCaseTypes[typeName.toUpperCase()] = this; if (interfaceTypes) { this.__interfaces = []; this.resolveInheritance(); for (var i = 2, l = arguments.length; i < l; i++) { var interfaceType = arguments[i]; if (!interfaceType.__interface) throw Error.argument('interfaceTypes[' + (i - 2) + ']', Sys.Res.notAnInterface); for (var methodName in interfaceType.prototype) { var method = interfaceType.prototype[methodName]; if (!this.prototype[methodName]) { this.prototype[methodName] = method; } } this.__interfaces.push(interfaceType); } } Sys.__registeredTypes[typeName] = true; return this; } Type.prototype.registerInterface = function Type$registerInterface(typeName) { /// /// /// var e = Function._validateParams(arguments, [ {name: "typeName", type: String} ]); if (e) throw e; if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName); var parsedName; try { parsedName = eval(typeName); } catch(e) { throw Error.argument('typeName', Sys.Res.argumentTypeName); } if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName); if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName)); Sys.__upperCaseTypes[typeName.toUpperCase()] = this; this.prototype.constructor = this; this.__typeName = typeName; this.__interface = true; Sys.__registeredTypes[typeName] = true; return this; } Type.prototype.resolveInheritance = function Type$resolveInheritance() { /// if (arguments.length !== 0) throw Error.parameterCount(); if (this.__basePrototypePending) { var baseType = this.__baseType; baseType.resolveInheritance(); for (var memberName in baseType.prototype) { var memberValue = baseType.prototype[memberName]; if (!this.prototype[memberName]) { this.prototype[memberName] = memberValue; } } delete this.__basePrototypePending; } } Type.getRootNamespaces = function Type$getRootNamespaces() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); return Array.clone(Sys.__rootNamespaces); } Type.isClass = function Type$isClass(type) { /// /// /// var e = Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) === 'undefined') || (type === null)) return false; return !!type.__class; } Type.isInterface = function Type$isInterface(type) { /// /// /// var e = Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) === 'undefined') || (type === null)) return false; return !!type.__interface; } Type.isNamespace = function Type$isNamespace(object) { /// /// /// var e = Function._validateParams(arguments, [ {name: "object", mayBeNull: true} ]); if (e) throw e; if ((typeof(object) === 'undefined') || (object === null)) return false; return !!object.__namespace; } Type.parse = function Type$parse(typeName, ns) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "typeName", type: String, mayBeNull: true}, {name: "ns", mayBeNull: true, optional: true} ]); if (e) throw e; var fn; if (ns) { fn = Sys.__upperCaseTypes[ns.getName().toUpperCase() + '.' + typeName.toUpperCase()]; return fn || null; } if (!typeName) return null; if (!Type.__htClasses) { Type.__htClasses = {}; } fn = Type.__htClasses[typeName]; if (!fn) { fn = eval(typeName); if (typeof(fn) !== 'function') throw Error.argument('typeName', Sys.Res.notATypeName); Type.__htClasses[typeName] = fn; } return fn; } Type.registerNamespace = function Type$registerNamespace(namespacePath) { /// /// var e = Function._validateParams(arguments, [ {name: "namespacePath", type: String} ]); if (e) throw e; Type._registerNamespace(namespacePath); } Type._registerNamespace = function Type$_registerNamespace(namespacePath) { if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) throw Error.argument('namespacePath', Sys.Res.invalidNameSpace); var rootObject = window; var namespaceParts = namespacePath.split('.'); for (var i = 0; i < namespaceParts.length; i++) { var currentPart = namespaceParts[i]; var ns = rootObject[currentPart]; var nsType = typeof(ns); if ((nsType !== "undefined") && (ns !== null)) { if (nsType === "function") { throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsClass, namespaceParts.splice(0, i + 1).join('.'))); } if ((typeof(ns) !== "object") || (ns instanceof Array)) { throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsNonObject, namespaceParts.splice(0, i + 1).join('.'))); } } if (!ns) { ns = rootObject[currentPart] = {}; } if (!ns.__namespace) { if ((i === 0) && (namespacePath !== "Sys")) { Sys.__rootNamespaces[Sys.__rootNamespaces.length] = ns; } ns.__namespace = true; ns.__typeName = namespaceParts.slice(0, i + 1).join('.'); var parsedName; try { parsedName = eval(ns.__typeName); } catch(e) { parsedName = null; } if (parsedName !== ns) { delete rootObject[currentPart]; throw Error.argument('namespacePath', Sys.Res.invalidNameSpace); } ns.getName = function ns$getName() {return this.__typeName;} } rootObject = ns; } } Type._checkDependency = function Type$_checkDependency(dependency, featureName) { var scripts = Type._registerScript._scripts, isDependent = (scripts ? (!!scripts[dependency]) : false); if ((typeof(featureName) !== 'undefined') && !isDependent) { throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded, featureName, dependency)); } return isDependent; } Type._registerScript = function Type$_registerScript(scriptName, dependencies) { var scripts = Type._registerScript._scripts; if (!scripts) { Type._registerScript._scripts = scripts = {}; } if (scripts[scriptName]) { throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded, scriptName)); } scripts[scriptName] = true; if (dependencies) { for (var i = 0, l = dependencies.length; i < l; i++) { var dependency = dependencies[i]; if (!Type._checkDependency(dependency)) { throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound, scriptName, dependency)); } } } } Type._registerNamespace("Sys"); Sys.__upperCaseTypes = {}; Sys.__rootNamespaces = [Sys]; Sys.__registeredTypes = {}; Sys._isInstanceOfType = function Sys$_isInstanceOfType(type, instance) { if (typeof(instance) === "undefined" || instance === null) return false; if (instance instanceof type) return true; var instanceType = Object.getType(instance); return !!(instanceType === type) || (instanceType.inheritsFrom && instanceType.inheritsFrom(type)) || (instanceType.implementsInterface && instanceType.implementsInterface(type)); } Sys._getBaseMethod = function Sys$_getBaseMethod(type, instance, name) { if (!Sys._isInstanceOfType(type, instance)) throw Error.argumentType('instance', Object.getType(instance), type); var baseType = type.getBaseType(); if (baseType) { var baseMethod = baseType.prototype[name]; return (baseMethod instanceof Function) ? baseMethod : null; } return null; } Sys._isDomElement = function Sys$_isDomElement(obj) { var val = false; if (typeof (obj.nodeType) !== 'number') { var doc = obj.ownerDocument || obj.document || obj; if (doc != obj) { var w = doc.defaultView || doc.parentWindow; val = (w != obj); } else { val = (typeof (doc.body) === 'undefined'); } } return !val; } Array.__typeName = 'Array'; Array.__class = true; Array.add = Array.enqueue = function Array$enqueue(array, item) { /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; array[array.length] = item; } Array.addRange = function Array$addRange(array, items) { /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "items", type: Array, elementMayBeNull: true} ]); if (e) throw e; array.push.apply(array, items); } Array.clear = function Array$clear(array) { /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true} ]); if (e) throw e; array.length = 0; } Array.clone = function Array$clone(array) { /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true} ]); if (e) throw e; if (array.length === 1) { return [array[0]]; } else { return Array.apply(null, array); } } Array.contains = function Array$contains(array, item) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; return (Sys._indexOf(array, item) >= 0); } Array.dequeue = function Array$dequeue(array) { /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true} ]); if (e) throw e; return array.shift(); } Array.forEach = function Array$forEach(array, method, instance) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "method", type: Function}, {name: "instance", mayBeNull: true, optional: true} ]); if (e) throw e; for (var i = 0, l = array.length; i < l; i++) { var elt = array[i]; if (typeof(elt) !== 'undefined') method.call(instance, elt, i, array); } } Array.indexOf = function Array$indexOf(array, item, start) { /// /// /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true, optional: true}, {name: "start", mayBeNull: true, optional: true} ]); if (e) throw e; return Sys._indexOf(array, item, start); } Array.insert = function Array$insert(array, index, item) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "index", mayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; array.splice(index, 0, item); } Array.parse = function Array$parse(value) { /// /// /// var e = Function._validateParams(arguments, [ {name: "value", type: String, mayBeNull: true} ]); if (e) throw e; if (!value) return []; var v = eval(value); if (!Array.isInstanceOfType(v)) throw Error.argument('value', Sys.Res.arrayParseBadFormat); return v; } Array.remove = function Array$remove(array, item) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; var index = Sys._indexOf(array, item); if (index >= 0) { array.splice(index, 1); } return (index >= 0); } Array.removeAt = function Array$removeAt(array, index) { /// /// /// var e = Function._validateParams(arguments, [ {name: "array", type: Array, elementMayBeNull: true}, {name: "index", mayBeNull: true} ]); if (e) throw e; array.splice(index, 1); } Sys._indexOf = function Sys$_indexOf(array, item, start) { if (typeof(item) === "undefined") return -1; var length = array.length; if (length !== 0) { start = start - 0; if (isNaN(start)) { start = 0; } else { if (isFinite(start)) { start = start - (start % 1); } if (start < 0) { start = Math.max(0, length + start); } } for (var i = start; i < length; i++) { if ((typeof(array[i]) !== "undefined") && (array[i] === item)) { return i; } } } return -1; } Type._registerScript("MicrosoftAjaxCore.debug.js"); Sys.IDisposable = function Sys$IDisposable() { throw Error.notImplemented(); } function Sys$IDisposable$dispose() { throw Error.notImplemented(); } Sys.IDisposable.prototype = { dispose: Sys$IDisposable$dispose } Sys.IDisposable.registerInterface('Sys.IDisposable'); Sys.StringBuilder = function Sys$StringBuilder(initialText) { /// /// var e = Function._validateParams(arguments, [ {name: "initialText", mayBeNull: true, optional: true} ]); if (e) throw e; this._parts = (typeof(initialText) !== 'undefined' && initialText !== null && initialText !== '') ? [initialText.toString()] : []; this._value = {}; this._len = 0; } function Sys$StringBuilder$append(text) { /// /// var e = Function._validateParams(arguments, [ {name: "text", mayBeNull: true} ]); if (e) throw e; this._parts[this._parts.length] = text; } function Sys$StringBuilder$appendLine(text) { /// /// var e = Function._validateParams(arguments, [ {name: "text", mayBeNull: true, optional: true} ]); if (e) throw e; this._parts[this._parts.length] = ((typeof(text) === 'undefined') || (text === null) || (text === '')) ? '\r\n' : text + '\r\n'; } function Sys$StringBuilder$clear() { /// if (arguments.length !== 0) throw Error.parameterCount(); this._parts = []; this._value = {}; this._len = 0; } function Sys$StringBuilder$isEmpty() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); if (this._parts.length === 0) return true; return this.toString() === ''; } function Sys$StringBuilder$toString(separator) { /// /// /// var e = Function._validateParams(arguments, [ {name: "separator", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; separator = separator || ''; var parts = this._parts; if (this._len !== parts.length) { this._value = {}; this._len = parts.length; } var val = this._value; if (typeof(val[separator]) === 'undefined') { if (separator !== '') { for (var i = 0; i < parts.length;) { if ((typeof(parts[i]) === 'undefined') || (parts[i] === '') || (parts[i] === null)) { parts.splice(i, 1); } else { i++; } } } val[separator] = this._parts.join(separator); } return val[separator]; } Sys.StringBuilder.prototype = { append: Sys$StringBuilder$append, appendLine: Sys$StringBuilder$appendLine, clear: Sys$StringBuilder$clear, isEmpty: Sys$StringBuilder$isEmpty, toString: Sys$StringBuilder$toString } Sys.StringBuilder.registerClass('Sys.StringBuilder'); Sys.Browser = {}; Sys.Browser.InternetExplorer = {}; Sys.Browser.Firefox = {}; Sys.Browser.Safari = {}; Sys.Browser.Opera = {}; Sys.Browser.agent = null; Sys.Browser.hasDebuggerStatement = false; Sys.Browser.name = navigator.appName; Sys.Browser.version = parseFloat(navigator.appVersion); Sys.Browser.documentMode = 0; if (navigator.userAgent.indexOf(' MSIE ') > -1) { Sys.Browser.agent = Sys.Browser.InternetExplorer; Sys.Browser.version = parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]); if (Sys.Browser.version >= 8) { if (document.documentMode >= 7) { Sys.Browser.documentMode = document.documentMode; } } Sys.Browser.hasDebuggerStatement = true; } else if (navigator.userAgent.indexOf(' Firefox/') > -1) { Sys.Browser.agent = Sys.Browser.Firefox; Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]); Sys.Browser.name = 'Firefox'; Sys.Browser.hasDebuggerStatement = true; } else if (navigator.userAgent.indexOf(' AppleWebKit/') > -1) { Sys.Browser.agent = Sys.Browser.Safari; Sys.Browser.version = parseFloat(navigator.userAgent.match(/ AppleWebKit\/(\d+(\.\d+)?)/)[1]); Sys.Browser.name = 'Safari'; } else if (navigator.userAgent.indexOf('Opera/') > -1) { Sys.Browser.agent = Sys.Browser.Opera; } Sys.EventArgs = function Sys$EventArgs() { /// if (arguments.length !== 0) throw Error.parameterCount(); } Sys.EventArgs.registerClass('Sys.EventArgs'); Sys.EventArgs.Empty = new Sys.EventArgs(); Sys.CancelEventArgs = function Sys$CancelEventArgs() { /// if (arguments.length !== 0) throw Error.parameterCount(); Sys.CancelEventArgs.initializeBase(this); this._cancel = false; } function Sys$CancelEventArgs$get_cancel() { /// if (arguments.length !== 0) throw Error.parameterCount(); return this._cancel; } function Sys$CancelEventArgs$set_cancel(value) { var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); if (e) throw e; this._cancel = value; } Sys.CancelEventArgs.prototype = { get_cancel: Sys$CancelEventArgs$get_cancel, set_cancel: Sys$CancelEventArgs$set_cancel } Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs); Sys.EventHandlerList = function Sys$EventHandlerList() { /// if (arguments.length !== 0) throw Error.parameterCount(); this._list = {}; } function Sys$EventHandlerList$_addHandler(id, handler) { Array.add(this._getEvent(id, true), handler); } function Sys$EventHandlerList$addHandler(id, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "id", type: String}, {name: "handler", type: Function} ]); if (e) throw e; this._addHandler(id, handler); } function Sys$EventHandlerList$_removeHandler(id, handler) { var evt = this._getEvent(id); if (!evt) return; Array.remove(evt, handler); } function Sys$EventHandlerList$removeHandler(id, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "id", type: String}, {name: "handler", type: Function} ]); if (e) throw e; this._removeHandler(id, handler); } function Sys$EventHandlerList$getHandler(id) { /// /// /// var e = Function._validateParams(arguments, [ {name: "id", type: String} ]); if (e) throw e; var evt = this._getEvent(id); if (!evt || (evt.length === 0)) return null; evt = Array.clone(evt); return function(source, args) { for (var i = 0, l = evt.length; i < l; i++) { evt[i](source, args); } }; } function Sys$EventHandlerList$_getEvent(id, create) { if (!this._list[id]) { if (!create) return null; this._list[id] = []; } return this._list[id]; } Sys.EventHandlerList.prototype = { _addHandler: Sys$EventHandlerList$_addHandler, addHandler: Sys$EventHandlerList$addHandler, _removeHandler: Sys$EventHandlerList$_removeHandler, removeHandler: Sys$EventHandlerList$removeHandler, getHandler: Sys$EventHandlerList$getHandler, _getEvent: Sys$EventHandlerList$_getEvent } Sys.EventHandlerList.registerClass('Sys.EventHandlerList'); Type.registerNamespace('Sys.UI'); Sys._Debug = function Sys$_Debug() { /// /// if (arguments.length !== 0) throw Error.parameterCount(); } function Sys$_Debug$_appendConsole(text) { if ((typeof(Debug) !== 'undefined') && Debug.writeln) { Debug.writeln(text); } if (window.console && window.console.log) { window.console.log(text); } if (window.opera) { window.opera.postError(text); } if (window.debugService) { window.debugService.trace(text); } } function Sys$_Debug$_appendTrace(text) { var traceElement = document.getElementById('TraceConsole'); if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) { traceElement.value += text + '\n'; } } function Sys$_Debug$assert(condition, message, displayCaller) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "condition", type: Boolean}, {name: "message", type: String, mayBeNull: true, optional: true}, {name: "displayCaller", type: Boolean, optional: true} ]); if (e) throw e; if (!condition) { message = (displayCaller && this.assert.caller) ? String.format(Sys.Res.assertFailedCaller, message, this.assert.caller) : String.format(Sys.Res.assertFailed, message); if (confirm(String.format(Sys.Res.breakIntoDebugger, message))) { this.fail(message); } } } function Sys$_Debug$clearTrace() { /// if (arguments.length !== 0) throw Error.parameterCount(); var traceElement = document.getElementById('TraceConsole'); if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) { traceElement.value = ''; } } function Sys$_Debug$fail(message) { /// /// var e = Function._validateParams(arguments, [ {name: "message", type: String, mayBeNull: true} ]); if (e) throw e; this._appendConsole(message); if (Sys.Browser.hasDebuggerStatement) { eval('debugger'); } } function Sys$_Debug$trace(text) { /// /// var e = Function._validateParams(arguments, [ {name: "text"} ]); if (e) throw e; this._appendConsole(text); this._appendTrace(text); } function Sys$_Debug$traceDump(object, name) { /// /// /// var e = Function._validateParams(arguments, [ {name: "object", mayBeNull: true}, {name: "name", type: String, mayBeNull: true, optional: true} ]); if (e) throw e; var text = this._traceDump(object, name, true); } function Sys$_Debug$_traceDump(object, name, recursive, indentationPadding, loopArray) { name = name? name : 'traceDump'; indentationPadding = indentationPadding? indentationPadding : ''; if (object === null) { this.trace(indentationPadding + name + ': null'); return; } switch(typeof(object)) { case 'undefined': this.trace(indentationPadding + name + ': Undefined'); break; case 'number': case 'string': case 'boolean': this.trace(indentationPadding + name + ': ' + object); break; default: if (Date.isInstanceOfType(object) || RegExp.isInstanceOfType(object)) { this.trace(indentationPadding + name + ': ' + object.toString()); break; } if (!loopArray) { loopArray = []; } else if (Array.contains(loopArray, object)) { this.trace(indentationPadding + name + ': ...'); return; } Array.add(loopArray, object); if ((object == window) || (object === document) || (window.HTMLElement && (object instanceof HTMLElement)) || (typeof(object.nodeName) === 'string')) { var tag = object.tagName? object.tagName : 'DomElement'; if (object.id) { tag += ' - ' + object.id; } this.trace(indentationPadding + name + ' {' + tag + '}'); } else { var typeName = Object.getTypeName(object); this.trace(indentationPadding + name + (typeof(typeName) === 'string' ? ' {' + typeName + '}' : '')); if ((indentationPadding === '') || recursive) { indentationPadding += " "; var i, length, properties, p, v; if (Array.isInstanceOfType(object)) { length = object.length; for (i = 0; i < length; i++) { this._traceDump(object[i], '[' + i + ']', recursive, indentationPadding, loopArray); } } else { for (p in object) { v = object[p]; if (!Function.isInstanceOfType(v)) { this._traceDump(v, p, recursive, indentationPadding, loopArray); } } } } } Array.remove(loopArray, object); } } Sys._Debug.prototype = { _appendConsole: Sys$_Debug$_appendConsole, _appendTrace: Sys$_Debug$_appendTrace, assert: Sys$_Debug$assert, clearTrace: Sys$_Debug$clearTrace, fail: Sys$_Debug$fail, trace: Sys$_Debug$trace, traceDump: Sys$_Debug$traceDump, _traceDump: Sys$_Debug$_traceDump } Sys._Debug.registerClass('Sys._Debug'); Sys.Debug = new Sys._Debug(); Sys.Debug.isDebug = true; function Sys$Enum$parse(value, ignoreCase) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "value", type: String}, {name: "ignoreCase", type: Boolean, optional: true} ]); if (e) throw e; var values, parsed, val; if (ignoreCase) { values = this.__lowerCaseValues; if (!values) { this.__lowerCaseValues = values = {}; var prototype = this.prototype; for (var name in prototype) { values[name.toLowerCase()] = prototype[name]; } } } else { values = this.prototype; } if (!this.__flags) { val = (ignoreCase ? value.toLowerCase() : value); parsed = values[val.trim()]; if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, this.__typeName)); return parsed; } else { var parts = (ignoreCase ? value.toLowerCase() : value).split(','); var v = 0; for (var i = parts.length - 1; i >= 0; i--) { var part = parts[i].trim(); parsed = values[part]; if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value.split(',')[i].trim(), this.__typeName)); v |= parsed; } return v; } } function Sys$Enum$toString(value) { /// /// /// var e = Function._validateParams(arguments, [ {name: "value", mayBeNull: true, optional: true} ]); if (e) throw e; if ((typeof(value) === 'undefined') || (value === null)) return this.__string; if ((typeof(value) != 'number') || ((value % 1) !== 0)) throw Error.argumentType('value', Object.getType(value), this); var values = this.prototype; var i; if (!this.__flags || (value === 0)) { for (i in values) { if (values[i] === value) { return i; } } } else { var sorted = this.__sortedValues; if (!sorted) { sorted = []; for (i in values) { sorted[sorted.length] = {key: i, value: values[i]}; } sorted.sort(function(a, b) { return a.value - b.value; }); this.__sortedValues = sorted; } var parts = []; var v = value; for (i = sorted.length - 1; i >= 0; i--) { var kvp = sorted[i]; var vali = kvp.value; if (vali === 0) continue; if ((vali & value) === vali) { parts[parts.length] = kvp.key; v -= vali; if (v === 0) break; } } if (parts.length && v === 0) return parts.reverse().join(', '); } throw Error.argumentOutOfRange('value', value, String.format(Sys.Res.enumInvalidValue, value, this.__typeName)); } Type.prototype.registerEnum = function Type$registerEnum(name, flags) { /// /// /// var e = Function._validateParams(arguments, [ {name: "name", type: String}, {name: "flags", type: Boolean, optional: true} ]); if (e) throw e; if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw Error.argument('name', Sys.Res.notATypeName); var parsedName; try { parsedName = eval(name); } catch(e) { throw Error.argument('name', Sys.Res.argumentTypeName); } if (parsedName !== this) throw Error.argument('name', Sys.Res.badTypeName); if (Sys.__registeredTypes[name]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, name)); for (var j in this.prototype) { var val = this.prototype[j]; if (!Type.__identifierRegExp.test(j)) throw Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, j)); if (typeof(val) !== 'number' || (val % 1) !== 0) throw Error.invalidOperation(Sys.Res.enumValueNotInteger); if (typeof(this[j]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.enumReservedName, j)); } Sys.__upperCaseTypes[name.toUpperCase()] = this; for (var i in this.prototype) { this[i] = this.prototype[i]; } this.__typeName = name; this.parse = Sys$Enum$parse; this.__string = this.toString(); this.toString = Sys$Enum$toString; this.__flags = flags; this.__enum = true; Sys.__registeredTypes[name] = true; } Type.isEnum = function Type$isEnum(type) { /// /// /// var e = Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) === 'undefined') || (type === null)) return false; return !!type.__enum; } Type.isFlags = function Type$isFlags(type) { /// /// /// var e = Function._validateParams(arguments, [ {name: "type", mayBeNull: true} ]); if (e) throw e; if ((typeof(type) === 'undefined') || (type === null)) return false; return !!type.__flags; } Sys.CollectionChange = function Sys$CollectionChange(action, newItems, newStartingIndex, oldItems, oldStartingIndex) { /// /// /// /// /// /// /// /// /// /// /// var e = Function._validateParams(arguments, [ {name: "action", type: Sys.NotifyCollectionChangedAction}, {name: "newItems", mayBeNull: true, optional: true}, {name: "newStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true}, {name: "oldItems", mayBeNull: true, optional: true}, {name: "oldStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true} ]); if (e) throw e; this.action = action; if (newItems) { if (!(newItems instanceof Array)) { newItems = [newItems]; } } this.newItems = newItems || null; if (typeof newStartingIndex !== "number") { newStartingIndex = -1; } this.newStartingIndex = newStartingIndex; if (oldItems) { if (!(oldItems instanceof Array)) { oldItems = [oldItems]; } } this.oldItems = oldItems || null; if (typeof oldStartingIndex !== "number") { oldStartingIndex = -1; } this.oldStartingIndex = oldStartingIndex; } Sys.CollectionChange.registerClass("Sys.CollectionChange"); Sys.NotifyCollectionChangedAction = function Sys$NotifyCollectionChangedAction() { /// /// /// /// if (arguments.length !== 0) throw Error.parameterCount(); throw Error.notImplemented(); } Sys.NotifyCollectionChangedAction.prototype = { add: 0, remove: 1, reset: 2 } Sys.NotifyCollectionChangedAction.registerEnum('Sys.NotifyCollectionChangedAction'); Sys.NotifyCollectionChangedEventArgs = function Sys$NotifyCollectionChangedEventArgs(changes) { /// /// var e = Function._validateParams(arguments, [ {name: "changes", type: Array, elementType: Sys.CollectionChange} ]); if (e) throw e; this._changes = changes; Sys.NotifyCollectionChangedEventArgs.initializeBase(this); } function Sys$NotifyCollectionChangedEventArgs$get_changes() { /// if (arguments.length !== 0) throw Error.parameterCount(); return this._changes || []; } Sys.NotifyCollectionChangedEventArgs.prototype = { get_changes: Sys$NotifyCollectionChangedEventArgs$get_changes } Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs", Sys.EventArgs); Sys.INotifyPropertyChange = function Sys$INotifyPropertyChange() { /// if (arguments.length !== 0) throw Error.parameterCount(); throw Error.notImplemented(); } function Sys$INotifyPropertyChange$add_propertyChanged(handler) { /// var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); if (e) throw e; throw Error.notImplemented(); } function Sys$INotifyPropertyChange$remove_propertyChanged(handler) { var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); if (e) throw e; throw Error.notImplemented(); } Sys.INotifyPropertyChange.prototype = { add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged, remove_propertyChanged: Sys$INotifyPropertyChange$remove_propertyChanged } Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange'); Sys.PropertyChangedEventArgs = function Sys$PropertyChangedEventArgs(propertyName) { /// /// var e = Function._validateParams(arguments, [ {name: "propertyName", type: String} ]); if (e) throw e; Sys.PropertyChangedEventArgs.initializeBase(this); this._propertyName = propertyName; } function Sys$PropertyChangedEventArgs$get_propertyName() { /// if (arguments.length !== 0) throw Error.parameterCount(); return this._propertyName; } Sys.PropertyChangedEventArgs.prototype = { get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName } Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs', Sys.EventArgs); Sys.Observer = function Sys$Observer() { throw Error.invalidOperation(); } Sys.Observer.registerClass("Sys.Observer"); Sys.Observer.makeObservable = function Sys$Observer$makeObservable(target) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target"} ]); if (e) throw e; var isArray = target instanceof Array, o = Sys.Observer; Sys.Observer._ensureObservable(target); if (target.setValue === o._observeMethods.setValue) return target; o._addMethods(target, o._observeMethods); if (isArray) { o._addMethods(target, o._arrayMethods); } return target; } Sys.Observer._ensureObservable = function Sys$Observer$_ensureObservable(target) { var type = typeof target; if ((type === "string") || (type === "number") || (type === "boolean") || (type === "date")) { throw Error.invalidOperation(String.format(Sys.Res.notObservable, type)); } } Sys.Observer._addMethods = function Sys$Observer$_addMethods(target, methods) { for (var m in methods) { if (target[m] && (target[m] !== methods[m])) { throw Error.invalidOperation(String.format(Sys.Res.observableConflict, m)); } target[m] = methods[m]; } } Sys.Observer._addEventHandler = function Sys$Observer$_addEventHandler(target, eventName, handler) { Sys.Observer._getContext(target, true).events._addHandler(eventName, handler); } Sys.Observer.addEventHandler = function Sys$Observer$addEventHandler(target, eventName, handler) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "target"}, {name: "eventName", type: String}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._ensureObservable(target); Sys.Observer._addEventHandler(target, eventName, handler); } Sys.Observer._removeEventHandler = function Sys$Observer$_removeEventHandler(target, eventName, handler) { Sys.Observer._getContext(target, true).events._removeHandler(eventName, handler); } Sys.Observer.removeEventHandler = function Sys$Observer$removeEventHandler(target, eventName, handler) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "target"}, {name: "eventName", type: String}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._ensureObservable(target); Sys.Observer._removeEventHandler(target, eventName, handler); } Sys.Observer.raiseEvent = function Sys$Observer$raiseEvent(target, eventName, eventArgs) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "target"}, {name: "eventName", type: String}, {name: "eventArgs", type: Sys.EventArgs} ]); if (e) throw e; Sys.Observer._ensureObservable(target); var ctx = Sys.Observer._getContext(target); if (!ctx) return; var handler = ctx.events.getHandler(eventName); if (handler) { handler(target, eventArgs); } } Sys.Observer.addPropertyChanged = function Sys$Observer$addPropertyChanged(target, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target"}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._ensureObservable(target); Sys.Observer._addEventHandler(target, "propertyChanged", handler); } Sys.Observer.removePropertyChanged = function Sys$Observer$removePropertyChanged(target, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target"}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._ensureObservable(target); Sys.Observer._removeEventHandler(target, "propertyChanged", handler); } Sys.Observer.beginUpdate = function Sys$Observer$beginUpdate(target) { /// /// var e = Function._validateParams(arguments, [ {name: "target"} ]); if (e) throw e; Sys.Observer._ensureObservable(target); Sys.Observer._getContext(target, true).updating = true; } Sys.Observer.endUpdate = function Sys$Observer$endUpdate(target) { /// /// var e = Function._validateParams(arguments, [ {name: "target"} ]); if (e) throw e; Sys.Observer._ensureObservable(target); var ctx = Sys.Observer._getContext(target); if (!ctx || !ctx.updating) return; ctx.updating = false; var dirty = ctx.dirty; ctx.dirty = false; if (dirty) { if (target instanceof Array) { var changes = ctx.changes; ctx.changes = null; Sys.Observer.raiseCollectionChanged(target, changes); } Sys.Observer.raisePropertyChanged(target, ""); } } Sys.Observer.isUpdating = function Sys$Observer$isUpdating(target) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target"} ]); if (e) throw e; Sys.Observer._ensureObservable(target); var ctx = Sys.Observer._getContext(target); return ctx ? ctx.updating : false; } Sys.Observer._setValue = function Sys$Observer$_setValue(target, propertyName, value) { var getter, setter, mainTarget = target, path = propertyName.split('.'); for (var i = 0, l = (path.length - 1); i < l ; i++) { var name = path[i]; getter = target["get_" + name]; if (typeof (getter) === "function") { target = getter.call(target); } else { target = target[name]; } var type = typeof (target); if ((target === null) || (type === "undefined")) { throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath, propertyName)); } } var currentValue, lastPath = path[l]; getter = target["get_" + lastPath]; setter = target["set_" + lastPath]; if (typeof(getter) === 'function') { currentValue = getter.call(target); } else { currentValue = target[lastPath]; } if (typeof(setter) === 'function') { setter.call(target, value); } else { target[lastPath] = value; } if (currentValue !== value) { var ctx = Sys.Observer._getContext(mainTarget); if (ctx && ctx.updating) { ctx.dirty = true; return; }; Sys.Observer.raisePropertyChanged(mainTarget, path[0]); } } Sys.Observer.setValue = function Sys$Observer$setValue(target, propertyName, value) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "target"}, {name: "propertyName", type: String}, {name: "value", mayBeNull: true} ]); if (e) throw e; Sys.Observer._ensureObservable(target); Sys.Observer._setValue(target, propertyName, value); } Sys.Observer.raisePropertyChanged = function Sys$Observer$raisePropertyChanged(target, propertyName) { /// /// /// Sys.Observer.raiseEvent(target, "propertyChanged", new Sys.PropertyChangedEventArgs(propertyName)); } Sys.Observer.addCollectionChanged = function Sys$Observer$addCollectionChanged(target, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._addEventHandler(target, "collectionChanged", handler); } Sys.Observer.removeCollectionChanged = function Sys$Observer$removeCollectionChanged(target, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._removeEventHandler(target, "collectionChanged", handler); } Sys.Observer._collectionChange = function Sys$Observer$_collectionChange(target, change) { var ctx = Sys.Observer._getContext(target); if (ctx && ctx.updating) { ctx.dirty = true; var changes = ctx.changes; if (!changes) { ctx.changes = changes = [change]; } else { changes.push(change); } } else { Sys.Observer.raiseCollectionChanged(target, [change]); Sys.Observer.raisePropertyChanged(target, 'length'); } } Sys.Observer.add = function Sys$Observer$add(target, item) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], target.length); Array.add(target, item); Sys.Observer._collectionChange(target, change); } Sys.Observer.addRange = function Sys$Observer$addRange(target, items) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true}, {name: "items", type: Array, elementMayBeNull: true} ]); if (e) throw e; var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, items, target.length); Array.addRange(target, items); Sys.Observer._collectionChange(target, change); } Sys.Observer.clear = function Sys$Observer$clear(target) { /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true} ]); if (e) throw e; var oldItems = Array.clone(target); Array.clear(target); Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset, null, -1, oldItems, 0)); } Sys.Observer.insert = function Sys$Observer$insert(target, index, item) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true}, {name: "index", type: Number, integer: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; Array.insert(target, index, item); Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], index)); } Sys.Observer.remove = function Sys$Observer$remove(target, item) { /// /// /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true}, {name: "item", mayBeNull: true} ]); if (e) throw e; var index = Array.indexOf(target, item); if (index !== -1) { Array.remove(target, item); Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index)); return true; } return false; } Sys.Observer.removeAt = function Sys$Observer$removeAt(target, index) { /// /// /// var e = Function._validateParams(arguments, [ {name: "target", type: Array, elementMayBeNull: true}, {name: "index", type: Number, integer: true} ]); if (e) throw e; if ((index > -1) && (index < target.length)) { var item = target[index]; Array.removeAt(target, index); Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index)); } } Sys.Observer.raiseCollectionChanged = function Sys$Observer$raiseCollectionChanged(target, changes) { /// /// /// Sys.Observer.raiseEvent(target, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes)); } Sys.Observer._observeMethods = { add_propertyChanged: function(handler) { Sys.Observer._addEventHandler(this, "propertyChanged", handler); }, remove_propertyChanged: function(handler) { Sys.Observer._removeEventHandler(this, "propertyChanged", handler); }, addEventHandler: function(eventName, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "eventName", type: String}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._addEventHandler(this, eventName, handler); }, removeEventHandler: function(eventName, handler) { /// /// /// var e = Function._validateParams(arguments, [ {name: "eventName", type: String}, {name: "handler", type: Function} ]); if (e) throw e; Sys.Observer._removeEventHandler(this, eventName, handler); }, get_isUpdating: function() { /// /// return Sys.Observer.isUpdating(this); }, beginUpdate: function() { /// Sys.Observer.beginUpdate(this); }, endUpdate: function() { /// Sys.Observer.endUpdate(this); }, setValue: function(name, value) { /// /// /// var e = Function._validateParams(arguments, [ {name: "name", type: String}, {name: "value", mayBeNull: true} ]); if (e) throw e; Sys.Observer._setValue(this, name, value); }, raiseEvent: function(eventName, eventArgs) { /// /// /// Sys.Observer.raiseEvent(this, eventName, eventArgs); }, raisePropertyChanged: function(name) { /// /// Sys.Observer.raiseEvent(this, "propertyChanged", new Sys.PropertyChangedEventArgs(name)); } } Sys.Observer._arrayMethods = { add_collectionChanged: function(handler) { Sys.Observer._addEventHandler(this, "collectionChanged", handler); }, remove_collectionChanged: function(handler) { Sys.Observer._removeEventHandler(this, "collectionChanged", handler); }, add: function(item) { /// /// Sys.Observer.add(this, item); }, addRange: function(items) { /// /// Sys.Observer.addRange(this, items); }, clear: function() { /// Sys.Observer.clear(this); }, insert: function(index, item) { /// /// /// Sys.Observer.insert(this, index, item); }, remove: function(item) { /// /// /// return Sys.Observer.remove(this, item); }, removeAt: function(index) { /// /// Sys.Observer.removeAt(this, index); }, raiseCollectionChanged: function(changes) { /// /// Sys.Observer.raiseEvent(this, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes)); } } Sys.Observer._getContext = function Sys$Observer$_getContext(obj, create) { var ctx = obj._observerContext; if (ctx) return ctx(); if (create) { return (obj._observerContext = Sys.Observer._createContext())(); } return null; } Sys.Observer._createContext = function Sys$Observer$_createContext() { var ctx = { events: new Sys.EventHandlerList() }; return function() { return ctx; } }