ScriptResource.axd
资源名称:a.rar [点击查看]
上传用户:aa118c
上传日期:2021-05-13
资源大小:4785k
文件大小:254k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

HTML/CSS

  1. //-----------------------------------------------------------------------
  2. // Copyright (C) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------
  4. // MicrosoftAjax.js
  5. // Microsoft AJAX Framework.
  6. Function.__typeName = 'Function';
  7. Function.__class = true;
  8. Function.createCallback = function Function$createCallback(method, context) {
  9.     /// <param name="method" type="Function"></param>
  10.     /// <param name="context" mayBeNull="true"></param>
  11.     /// <returns type="Function"></returns>
  12.     var e = Function._validateParams(arguments, [
  13.         {name: "method", type: Function},
  14.         {name: "context", mayBeNull: true}
  15.     ]);
  16.     if (e) throw e;
  17.         
  18.     return function() {
  19.         var l = arguments.length;
  20.         if (l > 0) {
  21.                         var args = [];
  22.             for (var i = 0; i < l; i++) {
  23.                 args[i] = arguments[i];
  24.             }
  25.             args[l] = context;
  26.             return method.apply(this, args);
  27.         }
  28.         return method.call(this, context);
  29.     }
  30. }
  31. Function.createDelegate = function Function$createDelegate(instance, method) {
  32.     /// <param name="instance" mayBeNull="true"></param>
  33.     /// <param name="method" type="Function"></param>
  34.     /// <returns type="Function"></returns>
  35.     var e = Function._validateParams(arguments, [
  36.         {name: "instance", mayBeNull: true},
  37.         {name: "method", type: Function}
  38.     ]);
  39.     if (e) throw e;
  40.         
  41.     return function() {
  42.         return method.apply(instance, arguments);
  43.     }
  44. }
  45. Function.emptyFunction = Function.emptyMethod = function Function$emptyMethod() {
  46.     if (arguments.length !== 0) throw Error.parameterCount();
  47. }
  48. Function._validateParams = function Function$_validateParams(params, expectedParams) {
  49.                                                                                                                                     
  50.     var e;
  51.     e = Function._validateParameterCount(params, expectedParams);
  52.     if (e) {
  53.         e.popStackFrame();
  54.         return e;
  55.     }
  56.     for (var i=0; i < params.length; i++) {
  57.                                 var expectedParam = expectedParams[Math.min(i, expectedParams.length - 1)];
  58.         var paramName = expectedParam.name;
  59.         if (expectedParam.parameterArray) {
  60.                         paramName += "[" + (i - expectedParams.length + 1) + "]";
  61.         }
  62.         e = Function._validateParameter(params[i], expectedParam, paramName);
  63.         if (e) {
  64.             e.popStackFrame();
  65.             return e;
  66.         }
  67.     }
  68.     return null;
  69. }
  70. Function._validateParameterCount = function Function$_validateParameterCount(params, expectedParams) {
  71.     var maxParams = expectedParams.length;
  72.     var minParams = 0;
  73.     for (var i=0; i < expectedParams.length; i++) {
  74.         if (expectedParams[i].parameterArray) {
  75.             maxParams = Number.MAX_VALUE;
  76.         }
  77.         else if (!expectedParams[i].optional) {
  78.             minParams++;
  79.         }
  80.     }
  81.     if (params.length < minParams || params.length > maxParams) {
  82.         var e = Error.parameterCount();
  83.         e.popStackFrame();
  84.         return e;
  85.     }
  86.     return null;
  87. }
  88. Function._validateParameter = function Function$_validateParameter(param, expectedParam, paramName) {
  89.     var e;
  90.     var expectedType = expectedParam.type;
  91.     var expectedInteger = !!expectedParam.integer;
  92.     var expectedDomElement = !!expectedParam.domElement;
  93.     var mayBeNull = !!expectedParam.mayBeNull;
  94.     e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName);
  95.     if (e) {
  96.         e.popStackFrame();
  97.         return e;
  98.     }
  99.         var expectedElementType = expectedParam.elementType;
  100.     var elementMayBeNull = !!expectedParam.elementMayBeNull;
  101.     if (expectedType === Array && typeof(param) !== "undefined" && param !== null &&
  102.         (expectedElementType || !elementMayBeNull)) {
  103.         var expectedElementInteger = !!expectedParam.elementInteger;
  104.         var expectedElementDomElement = !!expectedParam.elementDomElement;
  105.         for (var i=0; i < param.length; i++) {
  106.             var elem = param[i];
  107.             e = Function._validateParameterType(elem, expectedElementType,
  108.                 expectedElementInteger, expectedElementDomElement, elementMayBeNull,
  109.                 paramName + "[" + i + "]");
  110.             if (e) {
  111.                 e.popStackFrame();
  112.                 return e;
  113.             }
  114.         }
  115.     }
  116.     return null;
  117. }
  118. Function._validateParameterType = function Function$_validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) {
  119.     var e;
  120.     if (typeof(param) === "undefined") {
  121.         if (mayBeNull) {
  122.             return null;
  123.         }
  124.         else {
  125.             e = Error.argumentUndefined(paramName);
  126.             e.popStackFrame();
  127.             return e;
  128.         }
  129.     }
  130.     if (param === null) {
  131.         if (mayBeNull) {
  132.             return null;
  133.         }
  134.         else {
  135.             e = Error.argumentNull(paramName);
  136.             e.popStackFrame();
  137.             return e;
  138.         }
  139.     }
  140.     if (expectedType && expectedType.__enum) {
  141.         if (typeof(param) !== 'number') {
  142.             e = Error.argumentType(paramName, Object.getType(param), expectedType);
  143.             e.popStackFrame();
  144.             return e;
  145.         }
  146.         if ((param % 1) === 0) {
  147.             var values = expectedType.prototype;
  148.             if (!expectedType.__flags || (param === 0)) {
  149.                 for (var i in values) {
  150.                     if (values[i] === param) return null;
  151.                 }
  152.             }
  153.             else {
  154.                 var v = param;
  155.                 for (var i in values) {
  156.                     var vali = values[i];
  157.                     if (vali === 0) continue;
  158.                     if ((vali & param) === vali) {
  159.                         v -= vali;
  160.                     }
  161.                     if (v === 0) return null;
  162.                 }
  163.             }
  164.         }
  165.         e = Error.argumentOutOfRange(paramName, param, String.format(Sys.Res.enumInvalidValue, param, expectedType.getName()));
  166.         e.popStackFrame();
  167.         return e;
  168.     }
  169.                     if (expectedDomElement && (param !== window) && (param !== document) &&
  170.         !(window.HTMLElement && (param instanceof HTMLElement)) &&
  171.         (typeof(param.nodeName) !== 'string')) {
  172.         e = Error.argument(paramName, Sys.Res.argumentDomElement);
  173.         e.popStackFrame();
  174.         return e;
  175.     }
  176.         if (expectedType && !expectedType.isInstanceOfType(param)) {
  177.         e = Error.argumentType(paramName, Object.getType(param), expectedType);
  178.         e.popStackFrame();
  179.         return e;
  180.     }
  181.     if (expectedType === Number && expectedInteger) {
  182.                         if ((param % 1) !== 0) {
  183.             e = Error.argumentOutOfRange(paramName, param, Sys.Res.argumentInteger);
  184.             e.popStackFrame();
  185.             return e;
  186.         }
  187.     }
  188.     return null;
  189. }
  190. Error.__typeName = 'Error';
  191. Error.__class = true;
  192. Error.create = function Error$create(message, errorInfo) {
  193.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  194.     /// <param name="errorInfo" optional="true" mayBeNull="true"></param>
  195.     /// <returns type="Error"></returns>
  196.     var e = Function._validateParams(arguments, [
  197.         {name: "message", type: String, mayBeNull: true, optional: true},
  198.         {name: "errorInfo", mayBeNull: true, optional: true}
  199.     ]);
  200.     if (e) throw e;
  201.             var e = new Error(message);
  202.     e.message = message;
  203.     if (errorInfo) {
  204.         for (var v in errorInfo) {
  205.             e[v] = errorInfo[v];
  206.         }
  207.     }
  208.     e.popStackFrame();
  209.     return e;
  210. }
  211. Error.argument = function Error$argument(paramName, message) {
  212.     /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
  213.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  214.     /// <returns></returns>
  215.     var e = Function._validateParams(arguments, [
  216.         {name: "paramName", type: String, mayBeNull: true, optional: true},
  217.         {name: "message", type: String, mayBeNull: true, optional: true}
  218.     ]);
  219.     if (e) throw e;
  220.     var displayMessage = "Sys.ArgumentException: " + (message ? message : Sys.Res.argument);
  221.     if (paramName) {
  222.         displayMessage += "n" + String.format(Sys.Res.paramName, paramName);
  223.     }
  224.     var e = Error.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName });
  225.     e.popStackFrame();
  226.     return e;
  227. }
  228. Error.argumentNull = function Error$argumentNull(paramName, message) {
  229.     /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
  230.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  231.     /// <returns></returns>
  232.     var e = Function._validateParams(arguments, [
  233.         {name: "paramName", type: String, mayBeNull: true, optional: true},
  234.         {name: "message", type: String, mayBeNull: true, optional: true}
  235.     ]);
  236.     if (e) throw e;
  237.     var displayMessage = "Sys.ArgumentNullException: " + (message ? message : Sys.Res.argumentNull);
  238.     if (paramName) {
  239.         displayMessage += "n" + String.format(Sys.Res.paramName, paramName);
  240.     }
  241.     var e = Error.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName });
  242.     e.popStackFrame();
  243.     return e;
  244. }
  245. Error.argumentOutOfRange = function Error$argumentOutOfRange(paramName, actualValue, message) {
  246.     /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
  247.     /// <param name="actualValue" optional="true" mayBeNull="true"></param>
  248.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  249.     /// <returns></returns>
  250.     var e = Function._validateParams(arguments, [
  251.         {name: "paramName", type: String, mayBeNull: true, optional: true},
  252.         {name: "actualValue", mayBeNull: true, optional: true},
  253.         {name: "message", type: String, mayBeNull: true, optional: true}
  254.     ]);
  255.     if (e) throw e;
  256.     var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : Sys.Res.argumentOutOfRange);
  257.     if (paramName) {
  258.         displayMessage += "n" + String.format(Sys.Res.paramName, paramName);
  259.     }
  260.                 if (typeof(actualValue) !== "undefined" && actualValue !== null) {
  261.         displayMessage += "n" + String.format(Sys.Res.actualValue, actualValue);
  262.     }
  263.     var e = Error.create(displayMessage, {
  264.         name: "Sys.ArgumentOutOfRangeException",
  265.         paramName: paramName,
  266.         actualValue: actualValue
  267.     });
  268.     e.popStackFrame();
  269.     return e;
  270. }
  271. Error.argumentType = function Error$argumentType(paramName, actualType, expectedType, message) {
  272.     /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
  273.     /// <param name="actualType" type="Type" optional="true" mayBeNull="true"></param>
  274.     /// <param name="expectedType" type="Type" optional="true" mayBeNull="true"></param>
  275.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  276.     /// <returns></returns>
  277.     var e = Function._validateParams(arguments, [
  278.         {name: "paramName", type: String, mayBeNull: true, optional: true},
  279.         {name: "actualType", type: Type, mayBeNull: true, optional: true},
  280.         {name: "expectedType", type: Type, mayBeNull: true, optional: true},
  281.         {name: "message", type: String, mayBeNull: true, optional: true}
  282.     ]);
  283.     if (e) throw e;
  284.     var displayMessage = "Sys.ArgumentTypeException: ";
  285.     if (message) {
  286.         displayMessage += message;
  287.     }
  288.     else if (actualType && expectedType) {
  289.         displayMessage +=
  290.             String.format(Sys.Res.argumentTypeWithTypes, actualType.getName(), expectedType.getName());
  291.     }
  292.     else {
  293.         displayMessage += Sys.Res.argumentType;
  294.     }
  295.     if (paramName) {
  296.         displayMessage += "n" + String.format(Sys.Res.paramName, paramName);
  297.     }
  298.     var e = Error.create(displayMessage, {
  299.         name: "Sys.ArgumentTypeException",
  300.         paramName: paramName,
  301.         actualType: actualType,
  302.         expectedType: expectedType
  303.     });
  304.     e.popStackFrame();
  305.     return e;
  306. }
  307. Error.argumentUndefined = function Error$argumentUndefined(paramName, message) {
  308.     /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
  309.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  310.     /// <returns></returns>
  311.     var e = Function._validateParams(arguments, [
  312.         {name: "paramName", type: String, mayBeNull: true, optional: true},
  313.         {name: "message", type: String, mayBeNull: true, optional: true}
  314.     ]);
  315.     if (e) throw e;
  316.     var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : Sys.Res.argumentUndefined);
  317.     if (paramName) {
  318.         displayMessage += "n" + String.format(Sys.Res.paramName, paramName);
  319.     }
  320.     var e = Error.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName });
  321.     e.popStackFrame();
  322.     return e;
  323. }
  324. Error.format = function Error$format(message) {
  325.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  326.     /// <returns></returns>
  327.     var e = Function._validateParams(arguments, [
  328.         {name: "message", type: String, mayBeNull: true, optional: true}
  329.     ]);
  330.     if (e) throw e;
  331.     var displayMessage = "Sys.FormatException: " + (message ? message : Sys.Res.format);
  332.     var e = Error.create(displayMessage, {name: 'Sys.FormatException'});
  333.     e.popStackFrame();
  334.     return e;
  335. }
  336. Error.invalidOperation = function Error$invalidOperation(message) {
  337.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  338.     /// <returns></returns>
  339.     var e = Function._validateParams(arguments, [
  340.         {name: "message", type: String, mayBeNull: true, optional: true}
  341.     ]);
  342.     if (e) throw e;
  343.     var displayMessage = "Sys.InvalidOperationException: " + (message ? message : Sys.Res.invalidOperation);
  344.     var e = Error.create(displayMessage, {name: 'Sys.InvalidOperationException'});
  345.     e.popStackFrame();
  346.     return e;
  347. }
  348. Error.notImplemented = function Error$notImplemented(message) {
  349.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  350.     /// <returns></returns>
  351.     var e = Function._validateParams(arguments, [
  352.         {name: "message", type: String, mayBeNull: true, optional: true}
  353.     ]);
  354.     if (e) throw e;
  355.     var displayMessage = "Sys.NotImplementedException: " + (message ? message : Sys.Res.notImplemented);
  356.     var e = Error.create(displayMessage, {name: 'Sys.NotImplementedException'});
  357.     e.popStackFrame();
  358.     return e;
  359. }
  360. Error.parameterCount = function Error$parameterCount(message) {
  361.     /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  362.     /// <returns></returns>
  363.     var e = Function._validateParams(arguments, [
  364.         {name: "message", type: String, mayBeNull: true, optional: true}
  365.     ]);
  366.     if (e) throw e;
  367.     var displayMessage = "Sys.ParameterCountException: " + (message ? message : Sys.Res.parameterCount);
  368.     var e = Error.create(displayMessage, {name: 'Sys.ParameterCountException'});
  369.     e.popStackFrame();
  370.     return e;
  371. }
  372. Error.prototype.popStackFrame = function Error$popStackFrame() {
  373.     if (arguments.length !== 0) throw Error.parameterCount();
  374.                             
  375.     if (typeof(this.stack) === "undefined" || this.stack === null ||
  376.         typeof(this.fileName) === "undefined" || this.fileName === null ||
  377.         typeof(this.lineNumber) === "undefined" || this.lineNumber === null) {
  378.         return;
  379.     }
  380.     var stackFrames = this.stack.split("n");
  381.                 var currentFrame = stackFrames[0];
  382.     var pattern = this.fileName + ":" + this.lineNumber;
  383.     while(typeof(currentFrame) !== "undefined" &&
  384.           currentFrame !== null &&
  385.           currentFrame.indexOf(pattern) === -1) {
  386.         stackFrames.shift();
  387.         currentFrame = stackFrames[0];
  388.     }
  389.     var nextFrame = stackFrames[1];
  390.         if (typeof(nextFrame) === "undefined" || nextFrame === null) {
  391.         return;
  392.     }
  393.         var nextFrameParts = nextFrame.match(/@(.*):(d+)$/);
  394.     if (typeof(nextFrameParts) === "undefined" || nextFrameParts === null) {
  395.         return;
  396.     }
  397.     this.fileName = nextFrameParts[1];
  398.         this.lineNumber = parseInt(nextFrameParts[2]);
  399.     stackFrames.shift();
  400.     this.stack = stackFrames.join("n");
  401. }
  402. if (!window) this.window = this;
  403. window.Type = Function;
  404. window.__rootNamespaces = [];
  405. window.__registeredTypes = {};
  406. Type.__fullyQualifiedIdentifierRegExp = new RegExp("^[^.0-9 \s|,;:&*=+\-()\[\]{}^%#@!~\n\r\t\f\\]([^ \s|,;:&*=+\-()\[\]{}^%#@!~\n\r\t\f\\]*[^. \s|,;:&*=+\-()\[\]{}^%#@!~\n\r\t\f\\])?$", "i");
  407. Type.__identifierRegExp = new RegExp("^[^.0-9 \s|,;:&*=+\-()\[\]{}^%#@!~\n\r\t\f\\][^. \s|,;:&*=+\-()\[\]{}^%#@!~\n\r\t\f\\]*$", "i");
  408. Type.prototype.callBaseMethod = function Type$callBaseMethod(instance, name, baseArguments) {
  409.     /// <param name="instance"></param>
  410.     /// <param name="name" type="String"></param>
  411.     /// <param name="baseArguments" type="Array" optional="true" mayBeNull="true" elementMayBeNull="true"></param>
  412.     /// <returns></returns>
  413.     var e = Function._validateParams(arguments, [
  414.         {name: "instance"},
  415.         {name: "name", type: String},
  416.         {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true}
  417.     ]);
  418.     if (e) throw e;
  419.     var baseMethod = this.getBaseMethod(instance, name);
  420.     if (!baseMethod) throw Error.invalidOperation(String.format(Sys.Res.methodNotFound, name));
  421.     if (!baseArguments) {
  422.         return baseMethod.apply(instance);
  423.     }
  424.     else {
  425.         return baseMethod.apply(instance, baseArguments);
  426.     }
  427. }
  428. Type.prototype.getBaseMethod = function Type$getBaseMethod(instance, name) {
  429.     /// <param name="instance"></param>
  430.     /// <param name="name" type="String"></param>
  431.     /// <returns type="Function" mayBeNull="true"></returns>
  432.     var e = Function._validateParams(arguments, [
  433.         {name: "instance"},
  434.         {name: "name", type: String}
  435.     ]);
  436.     if (e) throw e;
  437.     if (!this.isInstanceOfType(instance)) throw Error.argumentType('instance', Object.getType(instance), this);
  438.     var baseType = this.getBaseType();
  439.     if (baseType) {
  440.         var baseMethod = baseType.prototype[name];
  441.         return (baseMethod instanceof Function) ? baseMethod : null;
  442.     }
  443.     return null;
  444. }
  445. Type.prototype.getBaseType = function Type$getBaseType() {
  446.     /// <returns type="Type" mayBeNull="true"></returns>
  447.     if (arguments.length !== 0) throw Error.parameterCount();
  448.     return (typeof(this.__baseType) === "undefined") ? null : this.__baseType;
  449. }
  450. Type.prototype.getInterfaces = function Type$getInterfaces() {
  451.     /// <returns type="Array" elementType="Type" mayBeNull="false" elementMayBeNull="false"></returns>
  452.     if (arguments.length !== 0) throw Error.parameterCount();
  453.     var result = [];
  454.     var type = this;
  455.     while(type) {
  456.         var interfaces = type.__interfaces;
  457.         if (interfaces) {
  458.             for (var i = 0, l = interfaces.length; i < l; i++) {
  459.                 var interfaceType = interfaces[i];
  460.                 if (!Array.contains(result, interfaceType)) {
  461.                     result[result.length] = interfaceType;
  462.                 }
  463.             }
  464.         }
  465.         type = type.__baseType;
  466.     }
  467.     return result;
  468. }
  469. Type.prototype.getName = function Type$getName() {
  470.     /// <returns type="String"></returns>
  471.     if (arguments.length !== 0) throw Error.parameterCount();
  472.     return (typeof(this.__typeName) === "undefined") ? "" : this.__typeName;
  473. }
  474. Type.prototype.implementsInterface = function Type$implementsInterface(interfaceType) {
  475.     /// <param name="interfaceType" type="Type"></param>
  476.     /// <returns type="Boolean"></returns>
  477.     var e = Function._validateParams(arguments, [
  478.         {name: "interfaceType", type: Type}
  479.     ]);
  480.     if (e) throw e;
  481.     this.resolveInheritance();
  482.     var interfaceName = interfaceType.getName();
  483.     var cache = this.__interfaceCache;
  484.     if (cache) {
  485.         var cacheEntry = cache[interfaceName];
  486.         if (typeof(cacheEntry) !== 'undefined') return cacheEntry;
  487.     }
  488.     else {
  489.         cache = this.__interfaceCache = {};
  490.     }
  491.     var baseType = this;
  492.     while (baseType) {
  493.         var interfaces = baseType.__interfaces;
  494.         if (interfaces) {
  495.             if (Array.indexOf(interfaces, interfaceType) !== -1) {
  496.                 return cache[interfaceName] = true;
  497.             }
  498.         }
  499.         baseType = baseType.__baseType;
  500.     }
  501.     return cache[interfaceName] = false;
  502. }
  503. Type.prototype.inheritsFrom = function Type$inheritsFrom(parentType) {
  504.     /// <param name="parentType" type="Type"></param>
  505.     /// <returns type="Boolean"></returns>
  506.     var e = Function._validateParams(arguments, [
  507.         {name: "parentType", type: Type}
  508.     ]);
  509.     if (e) throw e;
  510.     this.resolveInheritance();
  511.     var baseType = this.__baseType;
  512.     while (baseType) {
  513.         if (baseType === parentType) {
  514.             return true;
  515.         }
  516.         baseType = baseType.__baseType;
  517.     }
  518.     return false;
  519. }
  520. Type.prototype.initializeBase = function Type$initializeBase(instance, baseArguments) {
  521.     /// <param name="instance"></param>
  522.     /// <param name="baseArguments" type="Array" optional="true" mayBeNull="true" elementMayBeNull="true"></param>
  523.     /// <returns></returns>
  524.     var e = Function._validateParams(arguments, [
  525.         {name: "instance"},
  526.         {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true}
  527.     ]);
  528.     if (e) throw e;
  529.     if (!this.isInstanceOfType(instance)) throw Error.argumentType('instance', Object.getType(instance), this);
  530.     this.resolveInheritance();
  531.     if (this.__baseType) {
  532.         if (!baseArguments) {
  533.             this.__baseType.apply(instance);
  534.         }
  535.         else {
  536.             this.__baseType.apply(instance, baseArguments);
  537.         }
  538.     }
  539.     return instance;
  540. }
  541. Type.prototype.isImplementedBy = function Type$isImplementedBy(instance) {
  542.     /// <param name="instance" mayBeNull="true"></param>
  543.     /// <returns type="Boolean"></returns>
  544.     var e = Function._validateParams(arguments, [
  545.         {name: "instance", mayBeNull: true}
  546.     ]);
  547.     if (e) throw e;
  548.     if (typeof(instance) === "undefined" || instance === null) return false;
  549.     var instanceType = Object.getType(instance);
  550.     return !!(instanceType.implementsInterface && instanceType.implementsInterface(this));
  551. }
  552. Type.prototype.isInstanceOfType = function Type$isInstanceOfType(instance) {
  553.     /// <param name="instance" mayBeNull="true"></param>
  554.     /// <returns type="Boolean"></returns>
  555.     var e = Function._validateParams(arguments, [
  556.         {name: "instance", mayBeNull: true}
  557.     ]);
  558.     if (e) throw e;
  559.     if (typeof(instance) === "undefined" || instance === null) return false;
  560.     if (instance instanceof this) return true;
  561.     var instanceType = Object.getType(instance);
  562.     return !!(instanceType === this) ||
  563.            (instanceType.inheritsFrom && instanceType.inheritsFrom(this)) ||
  564.            (instanceType.implementsInterface && instanceType.implementsInterface(this));
  565. }
  566. Type.prototype.registerClass = function Type$registerClass(typeName, baseType, interfaceTypes) {
  567.     /// <param name="typeName" type="String"></param>
  568.     /// <param name="baseType" type="Type" optional="true" mayBeNull="true"></param>
  569.     /// <param name="interfaceTypes" parameterArray="true" type="Type"></param>
  570.     /// <returns type="Type"></returns>
  571.     var e = Function._validateParams(arguments, [
  572.         {name: "typeName", type: String},
  573.         {name: "baseType", type: Type, mayBeNull: true, optional: true},
  574.         {name: "interfaceTypes", type: Type, parameterArray: true}
  575.     ]);
  576.     if (e) throw e;
  577.     if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName);
  578.         var parsedName;
  579.     try {
  580.         parsedName = eval(typeName);
  581.     }
  582.     catch(e) {
  583.         throw Error.argument('typeName', Sys.Res.argumentTypeName);
  584.     }
  585.     if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName);
  586.         if (window.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName));
  587.             if ((arguments.length > 1) && (typeof(baseType) === 'undefined')) throw Error.argumentUndefined('baseType');
  588.     if (baseType && !baseType.__class) throw Error.argument('baseType', Sys.Res.baseNotAClass);
  589.     this.prototype.constructor = this;
  590.     this.__typeName = typeName;
  591.     this.__class = true;
  592.     if (baseType) {
  593.         this.__baseType = baseType;
  594.         this.__basePrototypePending = true;
  595.     }
  596.         if (!window.__classes) window.__classes = {};
  597.     window.__classes[typeName.toUpperCase()] = this;
  598.                 if (interfaceTypes) {
  599.         this.__interfaces = [];
  600.         for (var i = 2; i < arguments.length; i++) {
  601.             var interfaceType = arguments[i];
  602.             if (!interfaceType.__interface) throw Error.argument('interfaceTypes[' + (i - 2) + ']', Sys.Res.notAnInterface);
  603.             this.resolveInheritance();
  604.             for (var methodName in interfaceType.prototype) {
  605.                 var method = interfaceType.prototype[methodName];
  606.                 if (!this.prototype[methodName]) {
  607.                     this.prototype[methodName] = method;
  608.                 }
  609.             }
  610.             this.__interfaces.push(interfaceType);
  611.         }
  612.     }
  613.     window.__registeredTypes[typeName] = true;
  614.     return this;
  615. }
  616. Type.prototype.registerInterface = function Type$registerInterface(typeName) {
  617.     /// <param name="typeName" type="String"></param>
  618.     /// <returns type="Type"></returns>
  619.     var e = Function._validateParams(arguments, [
  620.         {name: "typeName", type: String}
  621.     ]);
  622.     if (e) throw e;
  623.     if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName);
  624.         var parsedName;
  625.     try {
  626.         parsedName = eval(typeName);
  627.     }
  628.     catch(e) {
  629.         throw Error.argument('typeName', Sys.Res.argumentTypeName);
  630.     }
  631.     if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName);
  632.         if (window.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName));
  633.     this.prototype.constructor = this;
  634.     this.__typeName = typeName;
  635.     this.__interface = true;
  636.     window.__registeredTypes[typeName] = true;
  637.     return this;
  638. }
  639. Type.prototype.resolveInheritance = function Type$resolveInheritance() {
  640.     if (arguments.length !== 0) throw Error.parameterCount();
  641.     if (this.__basePrototypePending) {
  642.         var baseType = this.__baseType;
  643.         baseType.resolveInheritance();
  644.         for (var memberName in baseType.prototype) {
  645.             var memberValue = baseType.prototype[memberName];
  646.             if (!this.prototype[memberName]) {
  647.                 this.prototype[memberName] = memberValue;
  648.             }
  649.         }
  650.         delete this.__basePrototypePending;
  651.     }
  652. }
  653. Type.getRootNamespaces = function Type$getRootNamespaces() {
  654.     /// <returns type="Array"></returns>
  655.     if (arguments.length !== 0) throw Error.parameterCount();
  656.     return Array.clone(window.__rootNamespaces);
  657. }
  658. Type.isClass = function Type$isClass(type) {
  659.     /// <param name="type" mayBeNull="true"></param>
  660.     /// <returns type="Boolean"></returns>
  661.     var e = Function._validateParams(arguments, [
  662.         {name: "type", mayBeNull: true}
  663.     ]);
  664.     if (e) throw e;
  665.     if ((typeof(type) === 'undefined') || (type === null)) return false;
  666.     return !!type.__class;
  667. }
  668. Type.isInterface = function Type$isInterface(type) {
  669.     /// <param name="type" mayBeNull="true"></param>
  670.     /// <returns type="Boolean"></returns>
  671.     var e = Function._validateParams(arguments, [
  672.         {name: "type", mayBeNull: true}
  673.     ]);
  674.     if (e) throw e;
  675.     if ((typeof(type) === 'undefined') || (type === null)) return false;
  676.     return !!type.__interface;
  677. }
  678. Type.isNamespace = function Type$isNamespace(object) {
  679.     /// <param name="object" mayBeNull="true"></param>
  680.     /// <returns type="Boolean"></returns>
  681.     var e = Function._validateParams(arguments, [
  682.         {name: "object", mayBeNull: true}
  683.     ]);
  684.     if (e) throw e;
  685.     if ((typeof(object) === 'undefined') || (object === null)) return false;
  686.     return !!object.__namespace;
  687. }
  688. Type.parse = function Type$parse(typeName, ns) {
  689.     /// <param name="typeName" type="String" mayBeNull="true"></param>
  690.     /// <param name="ns" optional="true" mayBeNull="true"></param>
  691.     /// <returns type="Type" mayBeNull="true"></returns>
  692.     var e = Function._validateParams(arguments, [
  693.         {name: "typeName", type: String, mayBeNull: true},
  694.         {name: "ns", mayBeNull: true, optional: true}
  695.     ]);
  696.     if (e) throw e;
  697.     var fn;
  698.     if (ns) {
  699.         if (!window.__classes) return null;
  700.         fn = window.__classes[ns.getName().toUpperCase() + '.' + typeName.toUpperCase()];
  701.         return fn || null;
  702.     }
  703.     if (!typeName) return null;
  704.     if (!Type.__htClasses) {
  705.         Type.__htClasses = {};
  706.     }
  707.     fn = Type.__htClasses[typeName];
  708.     if (!fn) {
  709.         fn = eval(typeName);
  710.         if (typeof(fn) !== 'function') throw Error.argument('typeName', Sys.Res.notATypeName);
  711.         Type.__htClasses[typeName] = fn;
  712.     }
  713.     return fn;
  714. }
  715. Type.registerNamespace = function Type$registerNamespace(namespacePath) {
  716.     /// <param name="namespacePath" type="String"></param>
  717.     var e = Function._validateParams(arguments, [
  718.         {name: "namespacePath", type: String}
  719.     ]);
  720.     if (e) throw e;
  721.     if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);
  722.     var rootObject = window;
  723.     var namespaceParts = namespacePath.split('.');
  724.     for (var i = 0; i < namespaceParts.length; i++) {
  725.         var currentPart = namespaceParts[i];
  726.         var ns = rootObject[currentPart];
  727.         if (ns && !ns.__namespace) {
  728.             throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsObject, namespaceParts.splice(0, i + 1).join('.')));
  729.         }
  730.         if (!ns) {
  731.             ns = rootObject[currentPart] = {};
  732.             if (i === 0) {
  733.                 window.__rootNamespaces[window.__rootNamespaces.length] = ns;
  734.             }
  735.             ns.__namespace = true;
  736.             ns.__typeName = namespaceParts.slice(0, i + 1).join('.');
  737.             var parsedName;
  738.             try {
  739.                 parsedName = eval(ns.__typeName);
  740.             }
  741.             catch(e) {
  742.                 parsedName = null;
  743.             }
  744.             if (parsedName !== ns) {
  745.                 delete rootObject[currentPart];
  746.                 throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);
  747.             }
  748.             ns.getName = function ns$getName() {return this.__typeName;}
  749.         }
  750.         rootObject = ns;
  751.     }
  752. }
  753. Object.__typeName = 'Object';
  754. Object.__class = true;
  755. Object.getType = function Object$getType(instance) {
  756.     /// <param name="instance"></param>
  757.     /// <returns type="Type"></returns>
  758.     var e = Function._validateParams(arguments, [
  759.         {name: "instance"}
  760.     ]);
  761.     if (e) throw e;
  762.     var ctor = instance.constructor;
  763.     if (!ctor || (typeof(ctor) !== "function") || !ctor.__typeName || (ctor.__typeName === 'Object')) {
  764.         return Object;
  765.     }
  766.     return ctor;
  767. }
  768. Object.getTypeName = function Object$getTypeName(instance) {
  769.     /// <param name="instance"></param>
  770.     /// <returns type="String"></returns>
  771.     var e = Function._validateParams(arguments, [
  772.         {name: "instance"}
  773.     ]);
  774.     if (e) throw e;
  775.     return Object.getType(instance).getName();
  776. }
  777. Boolean.__typeName = 'Boolean';
  778. Boolean.__class = true;
  779. Boolean.parse = function Boolean$parse(value) {
  780.     /// <param name="value" type="String"></param>
  781.     /// <returns type="Boolean"></returns>
  782.     var e = Function._validateParams(arguments, [
  783.         {name: "value", type: String}
  784.     ]);
  785.     if (e) throw e;
  786.     var v = value.trim().toLowerCase();
  787.     if (v === 'false') return false;
  788.     if (v === 'true') return true;
  789.     throw Error.argumentOutOfRange('value', value, Sys.Res.boolTrueOrFalse);
  790. }
  791. Date.__typeName = 'Date';
  792. Date.__class = true;
  793. Date._appendPreOrPostMatch = function Date$_appendPreOrPostMatch(preMatch, strBuilder) {
  794.                 var quoteCount = 0;
  795.     var escaped = false;
  796.     for (var i = 0, il = preMatch.length; i < il; i++) {
  797.         var c = preMatch.charAt(i);
  798.         switch (c) {
  799.         case ''':
  800.             if (escaped) strBuilder.append("'");
  801.             else quoteCount++;
  802.             escaped = false;
  803.             break;
  804.         case '\':
  805.             if (escaped) strBuilder.append("\");
  806.             escaped = !escaped;
  807.             break;
  808.         default:
  809.             strBuilder.append(c);
  810.             escaped = false;
  811.             break;
  812.         }
  813.     }
  814.     return quoteCount;
  815. }
  816. Date._expandFormat = function Date$_expandFormat(dtf, format) {
  817.         if (!format) {
  818.         format = "F";
  819.     }
  820.     if (format.length === 1) {
  821.         switch (format) {
  822.         case "d":
  823.             return dtf.ShortDatePattern;
  824.         case "D":
  825.             return dtf.LongDatePattern;
  826.         case "t":
  827.             return dtf.ShortTimePattern;
  828.         case "T":
  829.             return dtf.LongTimePattern;
  830.         case "F":
  831.             return dtf.FullDateTimePattern;
  832.         case "M": case "m":
  833.             return dtf.MonthDayPattern;
  834.         case "s":
  835.             return dtf.SortableDateTimePattern;
  836.         case "Y": case "y":
  837.             return dtf.YearMonthPattern;
  838.         default:
  839.             throw Error.format(Sys.Res.formatInvalidString);
  840.         }
  841.     }
  842.     return format;
  843. }
  844. Date._expandYear = function Date$_expandYear(dtf, year) {
  845.         if (year < 100) {
  846.         var curr = new Date().getFullYear();
  847.         year += curr - (curr % 100);
  848.         if (year > dtf.Calendar.TwoDigitYearMax) {
  849.             return year - 100;
  850.         }
  851.     }
  852.     return year;
  853. }
  854. Date._getParseRegExp = function Date$_getParseRegExp(dtf, format) {
  855.                 if (!dtf._parseRegExp) {
  856.         dtf._parseRegExp = {};
  857.     }
  858.     else if (dtf._parseRegExp[format]) {
  859.         return dtf._parseRegExp[format];
  860.     }
  861.         var expFormat = Date._expandFormat(dtf, format);
  862.     expFormat = expFormat.replace(/([^$.*+?|[](){}])/g, "\\$1");
  863.     var regexp = new Sys.StringBuilder("^");
  864.     var groups = [];
  865.     var index = 0;
  866.     var quoteCount = 0;
  867.     var tokenRegExp = Date._getTokenRegExp();
  868.     var match;
  869.         while ((match = tokenRegExp.exec(expFormat)) !== null) {
  870.         var preMatch = expFormat.slice(index, match.index);
  871.         index = tokenRegExp.lastIndex;
  872.                 quoteCount += Date._appendPreOrPostMatch(preMatch, regexp);
  873.         if ((quoteCount%2) === 1) {
  874.             regexp.append(match[0]);
  875.             continue;
  876.         }
  877.                 switch (match[0]) {
  878.             case 'dddd': case 'ddd':
  879.             case 'MMMM': case 'MMM':
  880.                 regexp.append("(\D+)");
  881.                 break;
  882.             case 'tt': case 't':
  883.                 regexp.append("(\D*)");
  884.                 break;
  885.             case 'yyyy':
  886.                 regexp.append("(\d{4})");
  887.                 break;
  888.             case 'fff':
  889.                 regexp.append("(\d{3})");
  890.                 break;
  891.             case 'ff':
  892.                 regexp.append("(\d{2})");
  893.                 break;
  894.             case 'f':
  895.                 regexp.append("(\d)");
  896.                 break;
  897.             case 'dd': case 'd':
  898.             case 'MM': case 'M':
  899.             case 'yy': case 'y':
  900.             case 'HH': case 'H':
  901.             case 'hh': case 'h':
  902.             case 'mm': case 'm':
  903.             case 'ss': case 's':
  904.                 regexp.append("(\d\d?)");
  905.                 break;
  906.             case 'zzz':
  907.                 regexp.append("([+-]?\d\d?:\d{2})");
  908.                 break;
  909.             case 'zz': case 'z':
  910.                 regexp.append("([+-]?\d\d?)");
  911.                 break;
  912.         }
  913.         Array.add(groups, match[0]);
  914.     }
  915.     Date._appendPreOrPostMatch(expFormat.slice(index), regexp);
  916.     regexp.append("$");
  917.         var regexpStr = regexp.toString().replace(/s+/g, "\s+");
  918.     var parseRegExp = {'regExp': regexpStr, 'groups': groups};
  919.         dtf._parseRegExp[format] = parseRegExp;
  920.     return parseRegExp;
  921. }
  922. Date._getTokenRegExp = function Date$_getTokenRegExp() {
  923.         return /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z/g;
  924. }
  925. Date.parseLocale = function Date$parseLocale(value, formats) {
  926.     /// <param name="value" type="String"></param>
  927.     /// <param name="formats" parameterArray="true" optional="true" mayBeNull="true"></param>
  928.     /// <returns type="Date"></returns>
  929.     var e = Function._validateParams(arguments, [
  930.         {name: "value", type: String},
  931.         {name: "formats", mayBeNull: true, optional: true, parameterArray: true}
  932.     ]);
  933.     if (e) throw e;
  934.     return Date._parse(value, Sys.CultureInfo.CurrentCulture, arguments);
  935. }
  936. Date.parseInvariant = function Date$parseInvariant(value, formats) {
  937.     /// <param name="value" type="String"></param>
  938.     /// <param name="formats" parameterArray="true" optional="true" mayBeNull="true"></param>
  939.     /// <returns type="Date"></returns>
  940.     var e = Function._validateParams(arguments, [
  941.         {name: "value", type: String},
  942.         {name: "formats", mayBeNull: true, optional: true, parameterArray: true}
  943.     ]);
  944.     if (e) throw e;
  945.     return Date._parse(value, Sys.CultureInfo.InvariantCulture, arguments);
  946. }
  947. Date._parse = function Date$_parse(value, cultureInfo, args) {
  948.             var custom = false;
  949.     for (var i = 1, il = args.length; i < il; i++) {
  950.         var format = args[i];
  951.         if (format) {
  952.             custom = true;
  953.             var date = Date._parseExact(value, format, cultureInfo);
  954.             if (date) return date;
  955.         }
  956.     }
  957.         if (! custom) {
  958.         var formats = cultureInfo._getDateTimeFormats();
  959.         for (var i = 0, il = formats.length; i < il; i++) {
  960.             var date = Date._parseExact(value, formats[i], cultureInfo);
  961.             if (date) return date;
  962.         }
  963.     }
  964.     return null;
  965. }
  966. Date._parseExact = function Date$_parseExact(value, format, cultureInfo) {
  967.             value = value.trim();
  968.     var dtf = cultureInfo.dateTimeFormat;
  969.             var parseInfo = Date._getParseRegExp(dtf, format);
  970.     var match = new RegExp(parseInfo.regExp).exec(value);
  971.         if (match !== null) {
  972.         var groups = parseInfo.groups;
  973.         var year = null, month = null, date = null, weekDay = null;
  974.         var hour = 0, min = 0, sec = 0, msec = 0, tzMinOffset = null;
  975.         var pmHour = false;
  976.                 for (var j = 0, jl = groups.length; j < jl; j++) {
  977.             var matchGroup = match[j+1];
  978.             if (matchGroup) {
  979.                 switch (groups[j]) {
  980.                     case 'dd': case 'd':
  981.                                                 date = Date._parseInt(matchGroup);
  982.                                                 if ((date < 1) || (date > 31)) return null;
  983.                         break;
  984.                     case 'MMMM':
  985.                                                 month = cultureInfo._getMonthIndex(matchGroup);
  986.                         if ((month < 0) || (month > 11)) return null;
  987.                         break;
  988.                     case 'MMM':
  989.                                                 month = cultureInfo._getAbbrMonthIndex(matchGroup);
  990.                         if ((month < 0) || (month > 11)) return null;
  991.                         break;
  992.                     case 'M': case 'MM':
  993.                                                 var month = Date._parseInt(matchGroup) - 1;
  994.                         if ((month < 0) || (month > 11)) return null;
  995.                         break;
  996.                     case 'y': case 'yy':
  997.                                                 year = Date._expandYear(dtf,Date._parseInt(matchGroup));
  998.                         if ((year < 0) || (year > 9999)) return null;
  999.                         break;
  1000.                     case 'yyyy':
  1001.                                                 year = Date._parseInt(matchGroup);
  1002.                         if ((year < 0) || (year > 9999)) return null;
  1003.                         break;
  1004.                     case 'h': case 'hh':
  1005.                                                 hour = Date._parseInt(matchGroup);
  1006.                         if (hour === 12) hour = 0;
  1007.                         if ((hour < 0) || (hour > 11)) return null;
  1008.                         break;
  1009.                     case 'H': case 'HH':
  1010.                                                 hour = Date._parseInt(matchGroup);
  1011.                         if ((hour < 0) || (hour > 23)) return null;
  1012.                         break;
  1013.                     case 'm': case 'mm':
  1014.                                                 min = Date._parseInt(matchGroup);
  1015.                         if ((min < 0) || (min > 59)) return null;
  1016.                         break;
  1017.                     case 's': case 'ss':
  1018.                                                 sec = Date._parseInt(matchGroup);
  1019.                         if ((sec < 0) || (sec > 59)) return null;
  1020.                         break;
  1021.                     case 'tt': case 't':
  1022.                                                 var upperToken = matchGroup.toUpperCase();
  1023.                         pmHour = (upperToken === dtf.PMDesignator.toUpperCase());
  1024.                         if (!pmHour && (upperToken !== dtf.AMDesignator.toUpperCase())) return null;
  1025.                         break;
  1026.                     case 'f':
  1027.                                                 msec = Date._parseInt(matchGroup) * 100;
  1028.                         if ((msec < 0) || (msec > 999)) return null;
  1029.                         break;
  1030.                     case 'ff':
  1031.                                                 msec = Date._parseInt(matchGroup) * 10;
  1032.                         if ((msec < 0) || (msec > 999)) return null;
  1033.                         break;
  1034.                     case 'fff':
  1035.                                                 msec = Date._parseInt(matchGroup);
  1036.                         if ((msec < 0) || (msec > 999)) return null;
  1037.                         break;
  1038.                     case 'dddd':
  1039.                                                 weekDay = cultureInfo._getDayIndex(matchGroup);
  1040.                         if ((weekDay < 0) || (weekDay > 6)) return null;
  1041.                         break;
  1042.                     case 'ddd':
  1043.                                                 weekDay = cultureInfo._getAbbrDayIndex(matchGroup);
  1044.                         if ((weekDay < 0) || (weekDay > 6)) return null;
  1045.                         break;
  1046.                     case 'zzz':
  1047.                                                 var offsets = matchGroup.split(/:/);
  1048.                         if (offsets.length !== 2) return null;
  1049.                         var hourOffset = Date._parseInt(offsets[0]);
  1050.                         if ((hourOffset < -12) || (hourOffset > 13)) return null;
  1051.                         var minOffset = Date._parseInt(offsets[1]);
  1052.                         if ((minOffset < 0) || (minOffset > 59)) return null;
  1053.                         tzMinOffset = (hourOffset * 60) + (matchGroup.startsWith('-')? -minOffset : minOffset);
  1054.                         break;
  1055.                     case 'z': case 'zz':
  1056.                                                 var hourOffset = Date._parseInt(matchGroup);
  1057.                         if ((hourOffset < -12) || (hourOffset > 13)) return null;
  1058.                         tzMinOffset = hourOffset * 60;
  1059.                         break;
  1060.                 }
  1061.             }
  1062.         }
  1063.         var result = new Date();
  1064.         if (year === null) {
  1065.             year = result.getFullYear();
  1066.         }
  1067.         if (month === null) {
  1068.             month = result.getMonth();
  1069.         }
  1070.         if (date === null) {
  1071.             date = result.getDate();
  1072.         }
  1073.                 result.setFullYear(year, month, date);
  1074.                 if (result.getDate() !== date) return null;
  1075.                 if ((weekDay !== null) && (result.getDay() !== weekDay)) {
  1076.             return null;
  1077.         }
  1078.                 if (pmHour && (hour < 12)) {
  1079.             hour += 12;
  1080.         }
  1081.         result.setHours(hour, min, sec, msec);
  1082.         if (tzMinOffset !== null) {
  1083.                         var adjustedMin = result.getMinutes() - (tzMinOffset + result.getTimezoneOffset());
  1084.                                                 result.setHours(result.getHours() + parseInt(adjustedMin/60), adjustedMin%60);
  1085.         }
  1086.         return result;
  1087.     }
  1088. }
  1089. Date._parseInt = function Date$_parseInt(value) {
  1090.         return parseInt(value.replace(/^[s0]+(d+)$/,"$1"));
  1091. }
  1092. Date.prototype.format = function Date$format(format) {
  1093.     /// <param name="format" type="String"></param>
  1094.     /// <returns type="String"></returns>
  1095.     var e = Function._validateParams(arguments, [
  1096.         {name: "format", type: String}
  1097.     ]);
  1098.     if (e) throw e;
  1099.     return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture);
  1100. }
  1101. Date.prototype.localeFormat = function Date$localeFormat(format) {
  1102.     /// <param name="format" type="String"></param>
  1103.     /// <returns type="String"></returns>
  1104.     var e = Function._validateParams(arguments, [
  1105.         {name: "format", type: String}
  1106.     ]);
  1107.     if (e) throw e;
  1108.     return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture);
  1109. }
  1110. Date.prototype._toFormattedString = function Date$_toFormattedString(format, cultureInfo) {
  1111.     if (!format || (format.length === 0) || (format === 'i')) {
  1112.         if (cultureInfo && (cultureInfo.name.length > 0)) {
  1113.             return this.toLocaleString();
  1114.         }
  1115.         else {
  1116.             return this.toString();
  1117.         }
  1118.     }
  1119.     var dtf = cultureInfo.dateTimeFormat;
  1120.     format = Date._expandFormat(dtf, format);
  1121.         var ret = new Sys.StringBuilder();
  1122.     var hour;
  1123.     function addLeadingZero(num) {
  1124.         if (num < 10) {
  1125.             return '0' + num;
  1126.         }
  1127.         return num.toString();
  1128.     }
  1129.     function addLeadingZeros(num) {
  1130.         if (num < 10) {
  1131.             return '00' + num;
  1132.         }
  1133.         if (num < 100) {
  1134.             return '0' + num;
  1135.         }
  1136.         return num.toString();
  1137.     }
  1138.     var quoteCount = 0;
  1139.     var tokenRegExp = Date._getTokenRegExp();
  1140.     for (;;) {
  1141.                 var index = tokenRegExp.lastIndex;
  1142.                 var ar = tokenRegExp.exec(format);
  1143.                 var preMatch = format.slice(index, ar ? ar.index : format.length);
  1144.         quoteCount += Date._appendPreOrPostMatch(preMatch, ret);
  1145.         if (!ar) break;
  1146.                 if ((quoteCount%2) === 1) {
  1147.             ret.append(ar[0]);
  1148.             continue;
  1149.         }
  1150.         switch (ar[0]) {
  1151.         case "dddd":
  1152.                         ret.append(dtf.DayNames[this.getDay()]);
  1153.             break;
  1154.         case "ddd":
  1155.                         ret.append(dtf.AbbreviatedDayNames[this.getDay()]);
  1156.             break;
  1157.         case "dd":
  1158.                         ret.append(addLeadingZero(this.getDate()));
  1159.             break;
  1160.         case "d":
  1161.                         ret.append(this.getDate());
  1162.             break;
  1163.         case "MMMM":
  1164.                         ret.append(dtf.MonthNames[this.getMonth()]);
  1165.             break;
  1166.         case "MMM":
  1167.                         ret.append(dtf.AbbreviatedMonthNames[this.getMonth()]);
  1168.             break;
  1169.         case "MM":
  1170.                         ret.append(addLeadingZero(this.getMonth() + 1));
  1171.             break;
  1172.         case "M":
  1173.                         ret.append(this.getMonth() + 1);
  1174.             break;
  1175.         case "yyyy":
  1176.                         ret.append(this.getFullYear());
  1177.             break;
  1178.         case "yy":
  1179.                         ret.append(addLeadingZero(this.getFullYear() % 100));
  1180.             break;
  1181.         case "y":
  1182.                         ret.append(this.getFullYear() % 100);
  1183.             break;
  1184.         case "hh":
  1185.                         hour = this.getHours() % 12;
  1186.             if (hour === 0) hour = 12;
  1187.             ret.append(addLeadingZero(hour));
  1188.             break;
  1189.         case "h":
  1190.                         hour = this.getHours() % 12;
  1191.             if (hour === 0) hour = 12;
  1192.             ret.append(hour);
  1193.             break;
  1194.         case "HH":
  1195.                         ret.append(addLeadingZero(this.getHours()));
  1196.             break;
  1197.         case "H":
  1198.                         ret.append(this.getHours());
  1199.             break;
  1200.         case "mm":
  1201.                         ret.append(addLeadingZero(this.getMinutes()));
  1202.             break;
  1203.         case "m":
  1204.                         ret.append(this.getMinutes());
  1205.             break;
  1206.         case "ss":
  1207.                         ret.append(addLeadingZero(this.getSeconds()));
  1208.             break;
  1209.         case "s":
  1210.                         ret.append(this.getSeconds());
  1211.             break;
  1212.         case "tt":
  1213.                         ret.append((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator);
  1214.             break;
  1215.         case "t":
  1216.                         ret.append(((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator).charAt(0));
  1217.             break;
  1218.         case "f":
  1219.                         ret.append(addLeadingZeros(this.getMilliseconds()).charAt(0));
  1220.             break;
  1221.         case "ff":
  1222.                         ret.append(addLeadingZeros(this.getMilliseconds()).substr(0, 2));
  1223.             break;
  1224.         case "fff":
  1225.                         ret.append(addLeadingZeros(this.getMilliseconds()));
  1226.             break;
  1227.         case "z":
  1228.                         hour = this.getTimezoneOffset() / 60;
  1229.             ret.append(((hour >= 0) ? '+' : '-') + Math.floor(Math.abs(hour)));
  1230.             break;
  1231.         case "zz":
  1232.                         hour = this.getTimezoneOffset() / 60;
  1233.             ret.append(((hour >= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))));
  1234.             break;
  1235.         case "zzz":
  1236.                         hour = this.getTimezoneOffset() / 60;
  1237.             ret.append(((hour >= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))) +
  1238.                 dtf.TimeSeparator + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60)));
  1239.             break;
  1240.         }
  1241.     }
  1242.     return ret.toString();
  1243. }
  1244. Number.__typeName = 'Number';
  1245. Number.__class = true;
  1246. Number.parseLocale = function Number$parseLocale(value) {
  1247.     /// <param name="value" type="String"></param>
  1248.     /// <returns type="Number"></returns>
  1249.     var e = Function._validateParams(arguments, [
  1250.         {name: "value", type: String}
  1251.     ]);
  1252.     if (e) throw e;
  1253.     return Number._parse(value, Sys.CultureInfo.CurrentCulture);
  1254. }
  1255. Number.parseInvariant = function Number$parseInvariant(value) {
  1256.     /// <param name="value" type="String"></param>
  1257.     /// <returns type="Number"></returns>
  1258.     var e = Function._validateParams(arguments, [
  1259.         {name: "value", type: String}
  1260.     ]);
  1261.     if (e) throw e;
  1262.     return Number._parse(value, Sys.CultureInfo.InvariantCulture);
  1263. }
  1264. Number._parse = function Number$_parse(value, cultureInfo) {
  1265.             var valueStr = value.trim();
  1266.     if (valueStr.match(/infinity/i) !== null) {
  1267.         return parseFloat(valueStr);
  1268.     }
  1269.     if (valueStr.match(/^0x[a-f0-9]+$/i) !== null) {
  1270.         return parseInt(valueStr);
  1271.     }
  1272.     var numFormat = cultureInfo.numberFormat;
  1273.     var decSeparator = numFormat.NumberDecimalSeparator;
  1274.     var grpSeparator = numFormat.NumberGroupSeparator;
  1275.             var numberFormatRegex = new RegExp("^[+-]?[\d\" + grpSeparator + "]*\" + decSeparator + "?\d*([eE][+-]?\d+)?$");
  1276.     if (!valueStr.match(numberFormatRegex)) {
  1277.         return Number.NaN;
  1278.     }
  1279.         valueStr = valueStr.split(grpSeparator).join("");
  1280.         valueStr = valueStr.replace(decSeparator, ".");
  1281.     return parseFloat(valueStr);
  1282. }
  1283. Number.prototype.format = function Number$format(format) {
  1284.     /// <param name="format" type="String"></param>
  1285.     /// <returns type="String"></returns>
  1286.     var e = Function._validateParams(arguments, [
  1287.         {name: "format", type: String}
  1288.     ]);
  1289.     if (e) throw e;
  1290.     return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture);
  1291. }
  1292. Number.prototype.localeFormat = function Number$localeFormat(format) {
  1293.     /// <param name="format" type="String"></param>
  1294.     /// <returns type="String"></returns>
  1295.     var e = Function._validateParams(arguments, [
  1296.         {name: "format", type: String}
  1297.     ]);
  1298.     if (e) throw e;
  1299.     return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture);
  1300. }
  1301. Number.prototype._toFormattedString = function Number$_toFormattedString(format, cultureInfo) {
  1302.     if (!format || (format.length === 0) || (format === 'i')) {
  1303.         if (cultureInfo && (cultureInfo.name.length > 0)) {
  1304.             return this.toLocaleString();
  1305.         }
  1306.         else {
  1307.             return this.toString();
  1308.         }
  1309.     }
  1310.         var _percentPositivePattern = ["n %", "n%", "%n" ];
  1311.     var _percentNegativePattern = ["-n %", "-n%", "-%n"];
  1312.     var _numberNegativePattern = ["(n)","-n","- n","n-","n -"];
  1313.     var _currencyPositivePattern = ["$n","n$","$ n","n $"];
  1314.     var _currencyNegativePattern = ["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];
  1315.         function expandNumber(number, precision, groupSizes, sep, decimalChar) {
  1316.         
  1317.         var curSize = groupSizes[0];
  1318.         var curGroupIndex = 1;
  1319.                 var numberString = number.toString();
  1320.         var right = "";
  1321.         var exponent = "";
  1322.                 var decimalSplit = numberString.split('.');
  1323.         if (decimalSplit.length > 1) {
  1324.             numberString = decimalSplit[0];
  1325.             right = decimalSplit[1];
  1326.                         var exponentSplit = right.split(/e/i);
  1327.             if (exponentSplit.length > 1) {
  1328.                 right = exponentSplit[0];
  1329.                 exponent = "e" + exponentSplit[1];
  1330.             }
  1331.         }
  1332.                 if (precision > 0) {
  1333.                         var rightDifference = right.length - precision;
  1334.             if (rightDifference > 0) {
  1335.                 right = right.slice(0, precision);
  1336.             } else if (rightDifference < 0) {
  1337.                 for (var i=0; i<Math.abs(rightDifference); i++) {
  1338.                     right += '0';
  1339.                 }
  1340.             }
  1341.                         right = decimalChar + right;
  1342.         }
  1343.         else {             right = "";
  1344.         }
  1345.         right += exponent;
  1346.         var stringIndex = numberString.length-1;
  1347.         var ret = "";
  1348.         while (stringIndex >= 0) {
  1349.                         if (curSize === 0 || curSize > stringIndex) {
  1350.                 if (ret.length > 0)
  1351.                     return numberString.slice(0, stringIndex + 1) + sep + ret + right;
  1352.                 else
  1353.                     return numberString.slice(0, stringIndex + 1) + right;
  1354.             }
  1355.             if (ret.length > 0)
  1356.                 ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1) + sep + ret;
  1357.             else
  1358.                 ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1);
  1359.             stringIndex -= curSize;
  1360.             if (curGroupIndex < groupSizes.length) {
  1361.                 curSize = groupSizes[curGroupIndex];
  1362.                 curGroupIndex++;
  1363.             }
  1364.         }
  1365.         return numberString.slice(0, stringIndex + 1) + sep + ret + right;
  1366.     }
  1367.     var nf = cultureInfo.numberFormat;
  1368.         var number = Math.abs(this);
  1369.         if (!format)
  1370.         format = "D";
  1371.     var precision = -1;
  1372.     if (format.length > 1) precision = parseInt(format.slice(1));
  1373.     var pattern;
  1374.     switch (format.charAt(0)) {
  1375.     case "d":
  1376.     case "D":
  1377.         pattern = 'n';
  1378.                 if (precision !== -1) {
  1379.             var numberStr = ""+number;
  1380.             var zerosToAdd = precision - numberStr.length;
  1381.             if (zerosToAdd > 0) {
  1382.                 for (var i=0; i<zerosToAdd; i++) {
  1383.                     numberStr = '0'+numberStr;
  1384.                 }
  1385.             }
  1386.             number = numberStr;
  1387.         }
  1388.                 if (this < 0) number = -number;
  1389.         break;
  1390.     case "c":
  1391.     case "C":
  1392.         if (this < 0) pattern = _currencyNegativePattern[nf.CurrencyNegativePattern];
  1393.         else pattern = _currencyPositivePattern[nf.CurrencyPositivePattern];
  1394.         if (precision === -1) precision = nf.CurrencyDecimalDigits;
  1395.         number = expandNumber(Math.abs(this), precision, nf.CurrencyGroupSizes, nf.CurrencyGroupSeparator, nf.CurrencyDecimalSeparator);
  1396.         break;
  1397.     case "n":
  1398.     case "N":
  1399.         if (this < 0) pattern = _numberNegativePattern[nf.NumberNegativePattern];
  1400.         else pattern = 'n';
  1401.         if (precision === -1) precision = nf.NumberDecimalDigits;
  1402.         number = expandNumber(Math.abs(this), precision, nf.NumberGroupSizes, nf.NumberGroupSeparator, nf.NumberDecimalSeparator);
  1403.         break;
  1404.     case "p":
  1405.     case "P":
  1406.         if (this < 0) pattern = _percentNegativePattern[nf.PercentNegativePattern];
  1407.         else pattern = _percentPositivePattern[nf.PercentPositivePattern];
  1408.         if (precision === -1) precision = nf.PercentDecimalDigits;
  1409.         number = expandNumber(Math.abs(this), precision, nf.PercentGroupSizes, nf.PercentGroupSeparator, nf.PercentDecimalSeparator);
  1410.         break;
  1411.     default:
  1412.         throw Error.format(Sys.Res.formatBadFormatSpecifier);
  1413.     }
  1414.     var regex = /n|$|-|%/g;
  1415.         var ret = "";
  1416.     for (;;) {
  1417.                 var index = regex.lastIndex;
  1418.                 var ar = regex.exec(pattern);
  1419.                 ret += pattern.slice(index, ar ? ar.index : pattern.length);
  1420.         if (!ar)
  1421.             break;
  1422.         switch (ar[0]) {
  1423.         case "n":
  1424.             ret += number;
  1425.             break;
  1426.         case "$":
  1427.             ret += nf.CurrencySymbol;
  1428.             break;
  1429.         case "-":
  1430.             ret += nf.NegativeSign;
  1431.             break;
  1432.         case "%":
  1433.             ret += nf.PercentSymbol;
  1434.             break;
  1435.         }
  1436.     }
  1437.     return ret;
  1438. }
  1439. RegExp.__typeName = 'RegExp';
  1440. RegExp.__class = true;
  1441. Array.__typeName = 'Array';
  1442. Array.__class = true;
  1443. Array.add = Array.enqueue = function Array$enqueue(array, item) {
  1444.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1445.     /// <param name="item" mayBeNull="true"></param>
  1446.     var e = Function._validateParams(arguments, [
  1447.         {name: "array", type: Array, elementMayBeNull: true},
  1448.         {name: "item", mayBeNull: true}
  1449.     ]);
  1450.     if (e) throw e;
  1451.         array[array.length] = item;
  1452. }
  1453. Array.addRange = function Array$addRange(array, items) {
  1454.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1455.     /// <param name="items" type="Array" elementMayBeNull="true"></param>
  1456.     var e = Function._validateParams(arguments, [
  1457.         {name: "array", type: Array, elementMayBeNull: true},
  1458.         {name: "items", type: Array, elementMayBeNull: true}
  1459.     ]);
  1460.     if (e) throw e;
  1461.         array.push.apply(array, items);
  1462. }
  1463. Array.clear = function Array$clear(array) {
  1464.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1465.     var e = Function._validateParams(arguments, [
  1466.         {name: "array", type: Array, elementMayBeNull: true}
  1467.     ]);
  1468.     if (e) throw e;
  1469.     array.length = 0;
  1470. }
  1471. Array.clone = function Array$clone(array) {
  1472.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1473.     /// <returns type="Array" elementMayBeNull="true"></returns>
  1474.     var e = Function._validateParams(arguments, [
  1475.         {name: "array", type: Array, elementMayBeNull: true}
  1476.     ]);
  1477.     if (e) throw e;
  1478.     if (array.length === 1) {
  1479.         return [array[0]];
  1480.     }
  1481.     else {
  1482.                         return Array.apply(null, array);
  1483.     }
  1484. }
  1485. Array.contains = function Array$contains(array, item) {
  1486.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1487.     /// <param name="item" mayBeNull="true"></param>
  1488.     /// <returns type="Boolean"></returns>
  1489.     var e = Function._validateParams(arguments, [
  1490.         {name: "array", type: Array, elementMayBeNull: true},
  1491.         {name: "item", mayBeNull: true}
  1492.     ]);
  1493.     if (e) throw e;
  1494.     return (Array.indexOf(array, item) >= 0);
  1495. }
  1496. Array.dequeue = function Array$dequeue(array) {
  1497.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1498.     /// <returns mayBeNull="true"></returns>
  1499.     var e = Function._validateParams(arguments, [
  1500.         {name: "array", type: Array, elementMayBeNull: true}
  1501.     ]);
  1502.     if (e) throw e;
  1503.     return array.shift();
  1504. }
  1505. Array.forEach = function Array$forEach(array, method, instance) {
  1506.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1507.     /// <param name="method" type="Function"></param>
  1508.     /// <param name="instance" optional="true" mayBeNull="true"></param>
  1509.     var e = Function._validateParams(arguments, [
  1510.         {name: "array", type: Array, elementMayBeNull: true},
  1511.         {name: "method", type: Function},
  1512.         {name: "instance", mayBeNull: true, optional: true}
  1513.     ]);
  1514.     if (e) throw e;
  1515.     for (var i = 0, l = array.length; i < l; i++) {
  1516.         var elt = array[i];
  1517.         if (typeof(elt) !== 'undefined') method.call(instance, elt, i, array);
  1518.     }
  1519. }
  1520. Array.indexOf = function Array$indexOf(array, item, start) {
  1521.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1522.     /// <param name="item" optional="true" mayBeNull="true"></param>
  1523.     /// <param name="start" optional="true" mayBeNull="true"></param>
  1524.     /// <returns type="Number"></returns>
  1525.     var e = Function._validateParams(arguments, [
  1526.         {name: "array", type: Array, elementMayBeNull: true},
  1527.         {name: "item", mayBeNull: true, optional: true},
  1528.         {name: "start", mayBeNull: true, optional: true}
  1529.     ]);
  1530.     if (e) throw e;
  1531.     if (typeof(item) === "undefined") return -1;
  1532.     var length = array.length;
  1533.     if (length !== 0) {
  1534.                 start = start - 0;
  1535.                 if (isNaN(start)) {
  1536.             start = 0;
  1537.         }
  1538.         else {
  1539.                                     if (isFinite(start)) {
  1540.                                 start = start - (start % 1);
  1541.             }
  1542.                         if (start < 0) {
  1543.                 start = Math.max(0, length + start);
  1544.             }
  1545.         }
  1546.                 for (var i = start; i < length; i++) {
  1547.             if ((typeof(array[i]) !== "undefined") && (array[i] === item)) {
  1548.                 return i;
  1549.             }
  1550.         }
  1551.     }
  1552.     return -1;
  1553. }
  1554. Array.insert = function Array$insert(array, index, item) {
  1555.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1556.     /// <param name="index" mayBeNull="true"></param>
  1557.     /// <param name="item" mayBeNull="true"></param>
  1558.     var e = Function._validateParams(arguments, [
  1559.         {name: "array", type: Array, elementMayBeNull: true},
  1560.         {name: "index", mayBeNull: true},
  1561.         {name: "item", mayBeNull: true}
  1562.     ]);
  1563.     if (e) throw e;
  1564.     array.splice(index, 0, item);
  1565. }
  1566. Array.parse = function Array$parse(value) {
  1567.     /// <param name="value" type="String" mayBeNull="true"></param>
  1568.     /// <returns type="Array" elementMayBeNull="true"></returns>
  1569.     var e = Function._validateParams(arguments, [
  1570.         {name: "value", type: String, mayBeNull: true}
  1571.     ]);
  1572.     if (e) throw e;
  1573.     if (!value) return [];
  1574.     var v = eval(value);
  1575.     if (!Array.isInstanceOfType(v)) throw Error.argument('value', Sys.Res.arrayParseBadFormat);
  1576.     return v;
  1577. }
  1578. Array.remove = function Array$remove(array, item) {
  1579.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1580.     /// <param name="item" mayBeNull="true"></param>
  1581.     /// <returns type="Boolean"></returns>
  1582.     var e = Function._validateParams(arguments, [
  1583.         {name: "array", type: Array, elementMayBeNull: true},
  1584.         {name: "item", mayBeNull: true}
  1585.     ]);
  1586.     if (e) throw e;
  1587.     var index = Array.indexOf(array, item);
  1588.     if (index >= 0) {
  1589.         array.splice(index, 1);
  1590.     }
  1591.     return (index >= 0);
  1592. }
  1593. Array.removeAt = function Array$removeAt(array, index) {
  1594.     /// <param name="array" type="Array" elementMayBeNull="true"></param>
  1595.     /// <param name="index" mayBeNull="true"></param>
  1596.     var e = Function._validateParams(arguments, [
  1597.         {name: "array", type: Array, elementMayBeNull: true},
  1598.         {name: "index", mayBeNull: true}
  1599.     ]);
  1600.     if (e) throw e;
  1601.     array.splice(index, 1);
  1602. }
  1603. String.__typeName = 'String';
  1604. String.__class = true;
  1605. String.prototype.endsWith = function String$endsWith(suffix) {
  1606.     /// <param name="suffix" type="String"></param>
  1607.     /// <returns type="Boolean"></returns>
  1608.     var e = Function._validateParams(arguments, [
  1609.         {name: "suffix", type: String}
  1610.     ]);
  1611.     if (e) throw e;
  1612.     return (this.substr(this.length - suffix.length) === suffix);
  1613. }
  1614. String.prototype.startsWith = function String$startsWith(prefix) {
  1615.     /// <param name="prefix" type="String"></param>
  1616.     /// <returns type="Boolean"></returns>
  1617.     var e = Function._validateParams(arguments, [
  1618.         {name: "prefix", type: String}
  1619.     ]);
  1620.     if (e) throw e;
  1621.     return (this.substr(0, prefix.length) === prefix);
  1622. }
  1623. String.prototype.trim = function String$trim() {
  1624.     /// <returns type="String"></returns>
  1625.     if (arguments.length !== 0) throw Error.parameterCount();
  1626.     return this.replace(/^s+|s+$/g, '');
  1627. }
  1628. String.prototype.trimEnd = function String$trimEnd() {
  1629.     /// <returns type="String"></returns>
  1630.     if (arguments.length !== 0) throw Error.parameterCount();
  1631.     return this.replace(/s+$/, '');
  1632. }
  1633. String.prototype.trimStart = function String$trimStart() {
  1634.     /// <returns type="String"></returns>
  1635.     if (arguments.length !== 0) throw Error.parameterCount();
  1636.     return this.replace(/^s+/, '');
  1637. }
  1638. String.format = function String$format(format, args) {
  1639.     /// <param name="format" type="String"></param>
  1640.     /// <param name="args" parameterArray="true" mayBeNull="true"></param>
  1641.     /// <returns type="String"></returns>
  1642.     var e = Function._validateParams(arguments, [
  1643.         {name: "format", type: String},
  1644.         {name: "args", mayBeNull: true, parameterArray: true}
  1645.     ]);
  1646.     if (e) throw e;
  1647.     return String._toFormattedString(false, arguments);
  1648. }
  1649. String.localeFormat = function String$localeFormat(format, args) {
  1650.     /// <param name="format" type="String"></param>
  1651.     /// <param name="args" parameterArray="true" mayBeNull="true"></param>
  1652.     /// <returns type="String"></returns>
  1653.     var e = Function._validateParams(arguments, [
  1654.         {name: "format", type: String},
  1655.         {name: "args", mayBeNull: true, parameterArray: true}
  1656.     ]);
  1657.     if (e) throw e;
  1658.     return String._toFormattedString(true, arguments);
  1659. }
  1660. String._toFormattedString = function String$_toFormattedString(useLocale, args) {
  1661.     var result = '';
  1662.     var format = args[0];
  1663.     for (var i=0;;) {
  1664.                 var open = format.indexOf('{', i);
  1665.         var close = format.indexOf('}', i);
  1666.         if ((open < 0) && (close < 0)) {
  1667.                         result += format.slice(i);
  1668.             break;
  1669.         }
  1670.         if ((close > 0) && ((close < open) || (open < 0))) {
  1671.                         if (format.charAt(close + 1) !== '}') {
  1672.                 throw Error.argument('format', Sys.Res.stringFormatBraceMismatch);
  1673.             }
  1674.             result += format.slice(i, close + 1);
  1675.             i = close + 2;
  1676.             continue;
  1677.         }
  1678.                 result += format.slice(i, open);
  1679.         i = open + 1;
  1680.                 if (format.charAt(i) === '{') {
  1681.             result += '{';
  1682.             i++;
  1683.             continue;
  1684.         }
  1685.                 if (close < 0) throw Error.argument('format', Sys.Res.stringFormatBraceMismatch);
  1686.         
  1687.                 var brace = format.substring(i, close);
  1688.         var colonIndex = brace.indexOf(':');
  1689.         var argNumber = parseInt((colonIndex < 0)? brace : brace.substring(0, colonIndex)) + 1;
  1690.         if (isNaN(argNumber)) throw Error.argument('format', Sys.Res.stringFormatInvalid);
  1691.         var argFormat = (colonIndex < 0)? '' : brace.substring(colonIndex + 1);
  1692.         var arg = args[argNumber];
  1693.         if (typeof(arg) === "undefined" || arg === null) {
  1694.             arg = '';
  1695.         }
  1696.                 if (arg.toFormattedString) {
  1697.             result += arg.toFormattedString(argFormat);
  1698.         }
  1699.         else if (useLocale && arg.localeFormat) {
  1700.             result += arg.localeFormat(argFormat);
  1701.         }
  1702.         else if (arg.format) {
  1703.             result += arg.format(argFormat);
  1704.         }
  1705.         else
  1706.             result += arg.toString();
  1707.         i = close + 1;
  1708.     }
  1709.     return result;
  1710. }
  1711. Type.registerNamespace('Sys');
  1712. Sys.IDisposable = function Sys$IDisposable() {
  1713.     throw Error.notImplemented();
  1714. }
  1715.     function Sys$IDisposable$dispose() {
  1716.         throw Error.notImplemented();
  1717.     }
  1718. Sys.IDisposable.prototype = {
  1719.     dispose: Sys$IDisposable$dispose
  1720. }
  1721. Sys.IDisposable.registerInterface('Sys.IDisposable');
  1722. Sys.StringBuilder = function Sys$StringBuilder(initialText) {
  1723.     /// <param name="initialText" optional="true" mayBeNull="true"></param>
  1724.     var e = Function._validateParams(arguments, [
  1725.         {name: "initialText", mayBeNull: true, optional: true}
  1726.     ]);
  1727.     if (e) throw e;
  1728.     this._parts = (typeof(initialText) !== 'undefined' && initialText !== null && initialText !== '') ?
  1729.         [initialText.toString()] : [];
  1730.     this._value = {};
  1731.     this._len = 0;
  1732. }
  1733.     function Sys$StringBuilder$append(text) {
  1734.         /// <param name="text" mayBeNull="true"></param>
  1735.         var e = Function._validateParams(arguments, [
  1736.             {name: "text", mayBeNull: true}
  1737.         ]);
  1738.         if (e) throw e;
  1739.         this._parts[this._parts.length] = text;
  1740.     }
  1741.     function Sys$StringBuilder$appendLine(text) {
  1742.         /// <param name="text" optional="true" mayBeNull="true"></param>
  1743.         var e = Function._validateParams(arguments, [
  1744.             {name: "text", mayBeNull: true, optional: true}
  1745.         ]);
  1746.         if (e) throw e;
  1747.         this._parts[this._parts.length] =
  1748.             ((typeof(text) === 'undefined') || (text === null) || (text === '')) ?
  1749.             'rn' : text + 'rn';
  1750.     }
  1751.     function Sys$StringBuilder$clear() {
  1752.         if (arguments.length !== 0) throw Error.parameterCount();
  1753.         this._parts = [];
  1754.         this._value = {};
  1755.         this._len = 0;
  1756.     }
  1757.     function Sys$StringBuilder$isEmpty() {
  1758.         /// <returns type="Boolean"></returns>
  1759.         if (arguments.length !== 0) throw Error.parameterCount();
  1760.         if (this._parts.length === 0) return true;
  1761.         return this.toString() === '';
  1762.     }
  1763.     function Sys$StringBuilder$toString(separator) {
  1764.         /// <param name="separator" type="String" optional="true" mayBeNull="true"></param>
  1765.         /// <returns type="String"></returns>
  1766.         var e = Function._validateParams(arguments, [
  1767.             {name: "separator", type: String, mayBeNull: true, optional: true}
  1768.         ]);
  1769.         if (e) throw e;
  1770.         separator = separator || '';
  1771.         var parts = this._parts;
  1772.         if (this._len !== parts.length) {
  1773.             this._value = {};
  1774.             this._len = parts.length;
  1775.         }
  1776.         var val = this._value;
  1777.         if (typeof(val[separator]) === 'undefined') {
  1778.                         if (separator !== '') {
  1779.                 for (var i = 0; i < parts.length;) {
  1780.                     if ((typeof(parts[i]) === 'undefined') || (parts[i] === '') || (parts[i] === null)) {
  1781.                         parts.splice(i, 1);
  1782.                     }
  1783.                     else {
  1784.                         i++;
  1785.                     }
  1786.                 }
  1787.             }
  1788.             val[separator] = this._parts.join(separator);
  1789.         }
  1790.         return val[separator];
  1791.     }
  1792. Sys.StringBuilder.prototype = {
  1793.     append: Sys$StringBuilder$append,
  1794.     appendLine: Sys$StringBuilder$appendLine,
  1795.     clear: Sys$StringBuilder$clear,
  1796.     isEmpty: Sys$StringBuilder$isEmpty,
  1797.             toString: Sys$StringBuilder$toString
  1798. }
  1799. Sys.StringBuilder.registerClass('Sys.StringBuilder');
  1800. if (!window.XMLHttpRequest) {
  1801.     window.XMLHttpRequest = function window$XMLHttpRequest() {
  1802.         var progIDs = [ 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP' ];
  1803.     
  1804.         for (var i = 0; i < progIDs.length; i++) {
  1805.             try {
  1806.                 var xmlHttp = new ActiveXObject(progIDs[i]);
  1807.                 return xmlHttp;
  1808.             }
  1809.             catch (ex) {
  1810.             }
  1811.         }
  1812.     
  1813.         return null;
  1814.     }
  1815. }
  1816. Sys.Browser = {};
  1817. Sys.Browser.InternetExplorer = {};
  1818. Sys.Browser.Firefox = {};
  1819. Sys.Browser.Safari = {};
  1820. Sys.Browser.Opera = {};
  1821. Sys.Browser.agent = null;
  1822. Sys.Browser.hasDebuggerStatement = false;
  1823. Sys.Browser.name = navigator.appName;
  1824. Sys.Browser.version = parseFloat(navigator.appVersion);
  1825. if (navigator.userAgent.indexOf(' MSIE ') > -1) {
  1826.     Sys.Browser.agent = Sys.Browser.InternetExplorer;
  1827.     Sys.Browser.version = parseFloat(navigator.userAgent.match(/MSIE (d+.d+)/)[1]);
  1828.     Sys.Browser.hasDebuggerStatement = true;
  1829. }
  1830. else if (navigator.userAgent.indexOf(' Firefox/') > -1) {
  1831.     Sys.Browser.agent = Sys.Browser.Firefox;
  1832.     Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox/(d+.d+)/)[1]);
  1833.     Sys.Browser.name = 'Firefox';
  1834.     Sys.Browser.hasDebuggerStatement = true;
  1835. }
  1836. else if (navigator.userAgent.indexOf(' Safari/') > -1) {
  1837.     Sys.Browser.agent = Sys.Browser.Safari;
  1838.     Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Safari/(d+.d+)/)[1]);
  1839.     Sys.Browser.name = 'Safari';
  1840. }
  1841. else if (navigator.userAgent.indexOf('Opera/') > -1) {
  1842.     Sys.Browser.agent = Sys.Browser.Opera;
  1843. }
  1844. Type.registerNamespace('Sys.UI');
  1845. Sys._Debug = function Sys$_Debug() {
  1846.     if (arguments.length !== 0) throw Error.parameterCount();
  1847. }
  1848.     function Sys$_Debug$_appendConsole(text) {
  1849.                 if ((typeof(Debug) !== 'undefined') && Debug.writeln) {
  1850.             Debug.writeln(text);
  1851.         }
  1852.                 if (window.console && window.console.log) {
  1853.             window.console.log(text);
  1854.         }
  1855.                 if (window.opera) {
  1856.             window.opera.postError(text);
  1857.         }
  1858.                 if (window.debugService) {
  1859.             window.debugService.trace(text);
  1860.         }
  1861.     }
  1862.     function Sys$_Debug$_appendTrace(text) {
  1863.         var traceElement = document.getElementById('TraceConsole');
  1864.         if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) {
  1865.             traceElement.value += text + 'n';
  1866.         }
  1867.     }
  1868.     function Sys$_Debug$assert(condition, message, displayCaller) {
  1869.         /// <param name="condition" type="Boolean"></param>
  1870.         /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
  1871.         /// <param name="displayCaller" type="Boolean" optional="true"></param>
  1872.         var e = Function._validateParams(arguments, [
  1873.             {name: "condition", type: Boolean},
  1874.             {name: "message", type: String, mayBeNull: true, optional: true},
  1875.             {name: "displayCaller", type: Boolean, optional: true}
  1876.         ]);
  1877.         if (e) throw e;
  1878.         if (!condition) {
  1879.             message = (displayCaller && this.assert.caller) ?
  1880.                 String.format(Sys.Res.assertFailedCaller, message, this.assert.caller) :
  1881.                 String.format(Sys.Res.assertFailed, message);
  1882.             if (confirm(String.format(Sys.Res.breakIntoDebugger, message))) {
  1883.                 this.fail(message);
  1884.             }
  1885.         }
  1886.     }
  1887.     function Sys$_Debug$clearTrace() {
  1888.         var traceElement = document.getElementById('TraceConsole');
  1889.         if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) {
  1890.             traceElement.value = '';
  1891.         }
  1892.     }
  1893.     function Sys$_Debug$fail(message) {
  1894.         /// <param name="message" type="String" mayBeNull="true"></param>
  1895.         var e = Function._validateParams(arguments, [
  1896.             {name: "message", type: String, mayBeNull: true}
  1897.         ]);
  1898.         if (e) throw e;
  1899.         this._appendConsole(message);
  1900.                 if (Sys.Browser.hasDebuggerStatement) {
  1901.             eval('debugger');
  1902.         }
  1903.     }
  1904.     function Sys$_Debug$trace(text) {
  1905.         /// <param name="text"></param>
  1906.         var e = Function._validateParams(arguments, [
  1907.             {name: "text"}
  1908.         ]);
  1909.         if (e) throw e;
  1910.         this._appendConsole(text);
  1911.         this._appendTrace(text);
  1912.     }
  1913.     function Sys$_Debug$traceDump(object, name) {
  1914.         /// <param name="object" mayBeNull="true"></param>
  1915.         /// <param name="name" type="String" mayBeNull="true" optional="true"></param>
  1916.         var e = Function._validateParams(arguments, [
  1917.             {name: "object", mayBeNull: true},
  1918.             {name: "name", type: String, mayBeNull: true, optional: true}
  1919.         ]);
  1920.         if (e) throw e;
  1921.         var text = this._traceDump(object, name, true);
  1922.     }
  1923.     function Sys$_Debug$_traceDump(object, name, recursive, indentationPadding, loopArray) {
  1924.         name = name? name : 'traceDump';
  1925.         indentationPadding = indentationPadding? indentationPadding : '';
  1926.         if (object === null) {
  1927.             this.trace(indentationPadding + name + ': null');
  1928.             return;
  1929.         }
  1930.         switch(typeof(object)) {
  1931.             case 'undefined':
  1932.                 this.trace(indentationPadding + name + ': Undefined');
  1933.                 break;
  1934.             case 'number': case 'string': case 'boolean':
  1935.                 this.trace(indentationPadding + name + ': ' + object);
  1936.                 break;
  1937.             default:
  1938.                 if (Date.isInstanceOfType(object) || RegExp.isInstanceOfType(object)) {
  1939.                     this.trace(indentationPadding + name + ': ' + object.toString());
  1940.                     break;
  1941.                 }
  1942.                 if (!loopArray) {
  1943.                     loopArray = [];
  1944.                 }
  1945.                 else if (Array.contains(loopArray, object)) {
  1946.                     this.trace(indentationPadding + name + ': ...');
  1947.                     return;
  1948.                 }
  1949.                 Array.add(loopArray, object);
  1950.                                                                 if ((object == window) || (object === document) ||
  1951.                     (window.HTMLElement && (object instanceof HTMLElement)) ||
  1952.                     (typeof(object.nodeName) === 'string')) {
  1953.                     var tag = object.tagName? object.tagName : 'DomElement';
  1954.                     if (object.id) {
  1955.                         tag += ' - ' + object.id;
  1956.                     }
  1957.                     this.trace(indentationPadding + name + ' {' +  tag + '}');
  1958.                 }
  1959.                                 else {
  1960.                     var typeName = Object.getTypeName(object);
  1961.                     this.trace(indentationPadding + name + (typeof(typeName) === 'string' ? ' {' + typeName + '}' : ''));
  1962.                     if ((indentationPadding === '') || recursive) {
  1963.                         indentationPadding += "    ";
  1964.                         var i, length, properties, p, v;
  1965.                         if (Array.isInstanceOfType(object)) {
  1966.                             length = object.length;
  1967.                             for (i = 0; i < length; i++) {
  1968.                                 this._traceDump(object[i], '[' + i + ']', recursive, indentationPadding, loopArray);
  1969.                             }
  1970.                         }
  1971.                         else {
  1972.                             for (p in object) {
  1973.                                 v = object[p];
  1974.                                 if (!Function.isInstanceOfType(v)) {
  1975.                                     this._traceDump(v, p, recursive, indentationPadding, loopArray);
  1976.                                 }
  1977.                             }
  1978.                         }
  1979.                     }
  1980.                 }
  1981.                 Array.remove(loopArray, object);
  1982.         }
  1983.     }
  1984. Sys._Debug.prototype = {
  1985.     _appendConsole: Sys$_Debug$_appendConsole,
  1986.     _appendTrace: Sys$_Debug$_appendTrace,
  1987.     assert: Sys$_Debug$assert,
  1988.     clearTrace: Sys$_Debug$clearTrace,
  1989.     fail: Sys$_Debug$fail,
  1990.     trace: Sys$_Debug$trace,
  1991.     traceDump: Sys$_Debug$traceDump,
  1992.     _traceDump: Sys$_Debug$_traceDump
  1993. }
  1994. Sys._Debug.registerClass('Sys._Debug');
  1995. Sys.Debug = new Sys._Debug();
  1996.     Sys.Debug.isDebug = true;
  1997. function Sys$Enum$parse(value, ignoreCase) {
  1998.     /// <param name="value" type="String"></param>
  1999.     /// <param name="ignoreCase" type="Boolean" optional="true"></param>
  2000.     /// <returns></returns>
  2001.     var e = Function._validateParams(arguments, [
  2002.         {name: "value", type: String},
  2003.         {name: "ignoreCase", type: Boolean, optional: true}
  2004.     ]);
  2005.     if (e) throw e;
  2006.     var values, parsed, val;
  2007.     if (ignoreCase) {
  2008.         values = this.__lowerCaseValues;
  2009.         if (!values) {
  2010.             this.__lowerCaseValues = values = {};
  2011.             var prototype = this.prototype;
  2012.             for (var name in prototype) {
  2013.                 values[name.toLowerCase()] = prototype[name];
  2014.             }
  2015.         }
  2016.     }
  2017.     else {
  2018.         values = this.prototype;
  2019.     }
  2020.     if (!this.__flags) {
  2021.         val = (ignoreCase ? value.toLowerCase() : value);
  2022.         parsed = values[val.trim()];
  2023.         if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, this.__typeName));
  2024.         return parsed;
  2025.     }
  2026.     else {
  2027.         var parts = (ignoreCase ? value.toLowerCase() : value).split(',');
  2028.         var v = 0;
  2029.         for (var i = parts.length - 1; i >= 0; i--) {
  2030.             var part = parts[i].trim();
  2031.             parsed = values[part];
  2032.             if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value.split(',')[i].trim(), this.__typeName));
  2033.             v |= parsed;
  2034.         }
  2035.         return v;
  2036.     }
  2037. }
  2038. function Sys$Enum$toString(value) {
  2039.     /// <param name="value" optional="true" mayBeNull="true"></param>
  2040.     /// <returns type="String"></returns>
  2041.     var e = Function._validateParams(arguments, [
  2042.         {name: "value", mayBeNull: true, optional: true}
  2043.     ]);
  2044.     if (e) throw e;
  2045.             if ((typeof(value) === 'undefined') || (value === null)) return this.__string;
  2046.     if ((typeof(value) != 'number') || ((value % 1) !== 0)) throw Error.argumentType('value', Object.getType(value), this);
  2047.     var values = this.prototype;
  2048.     var i;
  2049.     if (!this.__flags || (value === 0)) {
  2050.         for (i in values) {
  2051.             if (values[i] === value) {
  2052.                 return i;
  2053.             }
  2054.         }
  2055.     }
  2056.     else {
  2057.         var sorted = this.__sortedValues;
  2058.         if (!sorted) {
  2059.             sorted = [];
  2060.             for (i in values) {
  2061.                 sorted[sorted.length] = {key: i, value: values[i]};
  2062.             }
  2063.             sorted.sort(function(a, b) {
  2064.                 return a.value - b.value;
  2065.             });
  2066.             this.__sortedValues = sorted;
  2067.         }
  2068.         var parts = [];
  2069.         var v = value;
  2070.         for (i = sorted.length - 1; i >= 0; i--) {
  2071.             var kvp = sorted[i];
  2072.             var vali = kvp.value;
  2073.             if (vali === 0) continue;
  2074.             if ((vali & value) === vali) {
  2075.                 parts[parts.length] = kvp.key;
  2076.                 v -= vali;
  2077.                 if (v === 0) break;
  2078.             }
  2079.         }
  2080.         if (parts.length && v === 0) return parts.reverse().join(', ');
  2081.     }
  2082.     throw Error.argumentOutOfRange('value', value, String.format(Sys.Res.enumInvalidValue, value, this.__typeName));
  2083. }
  2084. Type.prototype.registerEnum = function Type$registerEnum(name, flags) {
  2085.     /// <param name="name" type="String"></param>
  2086.     /// <param name="flags" type="Boolean" optional="true"></param>
  2087.     var e = Function._validateParams(arguments, [
  2088.         {name: "name", type: String},
  2089.         {name: "flags", type: Boolean, optional: true}
  2090.     ]);
  2091.     if (e) throw e;
  2092.     if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw Error.argument('name', Sys.Res.notATypeName);
  2093.         var parsedName;
  2094.     try {
  2095.         parsedName = eval(name);
  2096.     }
  2097.     catch(e) {
  2098.         throw Error.argument('name', Sys.Res.argumentTypeName);
  2099.     }
  2100.     if (parsedName !== this) throw Error.argument('name', Sys.Res.badTypeName);
  2101.     if (window.__registeredTypes[name]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, name));
  2102.     for (var i in this.prototype) {
  2103.         var val = this.prototype[i];
  2104.         if (!Type.__identifierRegExp.test(i)) throw Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, i));
  2105.         if (typeof(val) !== 'number' || (val % 1) !== 0) throw Error.invalidOperation(Sys.Res.enumValueNotInteger);
  2106.         if (typeof(this[i]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.enumReservedName, i));
  2107.     }
  2108.     for (var i in this.prototype) {
  2109.         this[i] = this.prototype[i];
  2110.     }
  2111.     this.__typeName = name;
  2112.     this.parse = Sys$Enum$parse;
  2113.     this.__string = this.toString();
  2114.     this.toString = Sys$Enum$toString;
  2115.     this.__flags = flags;
  2116.     this.__enum = true;
  2117.     window.__registeredTypes[name] = true;
  2118. }
  2119. Type.isEnum = function Type$isEnum(type) {
  2120.     /// <param name="type" mayBeNull="true"></param>
  2121.     /// <returns type="Boolean"></returns>
  2122.     var e = Function._validateParams(arguments, [
  2123.         {name: "type", mayBeNull: true}
  2124.     ]);
  2125.     if (e) throw e;
  2126.     if ((typeof(type) === 'undefined') || (type === null)) return false;
  2127.     return !!type.__enum;
  2128. }
  2129. Type.isFlags = function Type$isFlags(type) {
  2130.     /// <param name="type" mayBeNull="true"></param>
  2131.     /// <returns type="Boolean"></returns>
  2132.     var e = Function._validateParams(arguments, [
  2133.         {name: "type", mayBeNull: true}
  2134.     ]);
  2135.     if (e) throw e;
  2136.     if ((typeof(type) === 'undefined') || (type === null)) return false;
  2137.     return !!type.__flags;
  2138. }
  2139. Sys.EventHandlerList = function Sys$EventHandlerList() {
  2140.     if (arguments.length !== 0) throw Error.parameterCount();
  2141.     this._list = {};
  2142. }
  2143.     function Sys$EventHandlerList$addHandler(id, handler) {
  2144.         /// <param name="id" type="String"></param>
  2145.         /// <param name="handler" type="Function"></param>
  2146.         var e = Function._validateParams(arguments, [
  2147.             {name: "id", type: String},
  2148.             {name: "handler", type: Function}
  2149.         ]);
  2150.         if (e) throw e;
  2151.         Array.add(this._getEvent(id, true), handler);
  2152.     }
  2153.     function Sys$EventHandlerList$removeHandler(id, handler) {
  2154.         /// <param name="id" type="String"></param>
  2155.         /// <param name="handler" type="Function"></param>
  2156.         var e = Function._validateParams(arguments, [
  2157.             {name: "id", type: String},
  2158.             {name: "handler", type: Function}
  2159.         ]);
  2160.         if (e) throw e;
  2161.         var evt = this._getEvent(id);
  2162.         if (!evt) return;
  2163.         Array.remove(evt, handler);
  2164.     }
  2165.     function Sys$EventHandlerList$getHandler(id) {
  2166.         /// <param name="id" type="String"></param>
  2167.         /// <returns type="Function"></returns>
  2168.         var e = Function._validateParams(arguments, [
  2169.             {name: "id", type: String}
  2170.         ]);
  2171.         if (e) throw e;
  2172.         var evt = this._getEvent(id);
  2173.         if (!evt || (evt.length === 0)) return null;
  2174.         evt = Array.clone(evt);
  2175.         if (!evt._handler) {
  2176.             evt._handler = function(source, args) {
  2177.                 for (var i = 0, l = evt.length; i < l; i++) {
  2178.                     evt[i](source, args);
  2179.                 }
  2180.             };
  2181.         }
  2182.         return evt._handler;
  2183.     }
  2184.     function Sys$EventHandlerList$_getEvent(id, create) {
  2185.         if (!this._list[id]) {
  2186.             if (!create) return null;
  2187.             this._list[id] = [];
  2188.         }
  2189.         return this._list[id];
  2190.     }
  2191. Sys.EventHandlerList.prototype = {
  2192.     addHandler: Sys$EventHandlerList$addHandler,
  2193.     removeHandler: Sys$EventHandlerList$removeHandler,
  2194.     getHandler: Sys$EventHandlerList$getHandler,
  2195.     _getEvent: Sys$EventHandlerList$_getEvent
  2196. }
  2197. Sys.EventHandlerList.registerClass('Sys.EventHandlerList');
  2198. Sys.EventArgs = function Sys$EventArgs() {
  2199.     if (arguments.length !== 0) throw Error.parameterCount();
  2200. }
  2201. Sys.EventArgs.registerClass('Sys.EventArgs');
  2202. Sys.EventArgs.Empty = new Sys.EventArgs();
  2203. Sys.CancelEventArgs = function Sys$CancelEventArgs() {
  2204.     if (arguments.length !== 0) throw Error.parameterCount();
  2205.     Sys.CancelEventArgs.initializeBase(this);
  2206.     this._cancel = false;
  2207. }
  2208.     function Sys$CancelEventArgs$get_cancel() {
  2209.         /// <value type="Boolean"></value>
  2210.         if (arguments.length !== 0) throw Error.parameterCount();
  2211.         return this._cancel;
  2212.     }
  2213.     function Sys$CancelEventArgs$set_cancel(value) {
  2214.         var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]);
  2215.         if (e) throw e;
  2216.         this._cancel = value;
  2217.     }
  2218. Sys.CancelEventArgs.prototype = {
  2219.     get_cancel: Sys$CancelEventArgs$get_cancel,
  2220.     set_cancel: Sys$CancelEventArgs$set_cancel
  2221. }
  2222. Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs);
  2223. Sys.INotifyPropertyChange = function Sys$INotifyPropertyChange() {
  2224.     if (arguments.length !== 0) throw Error.parameterCount();
  2225.     throw Error.notImplemented();
  2226. }
  2227.     function Sys$INotifyPropertyChange$add_propertyChanged(handler) {
  2228.     var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2229.     if (e) throw e;
  2230.         throw Error.notImplemented();
  2231.     }
  2232.     function Sys$INotifyPropertyChange$remove_propertyChanged(handler) {
  2233.     var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2234.     if (e) throw e;
  2235.         throw Error.notImplemented();
  2236.     }
  2237. Sys.INotifyPropertyChange.prototype = {
  2238.     add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged,
  2239.     remove_propertyChanged: Sys$INotifyPropertyChange$remove_propertyChanged
  2240. }
  2241. Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange');
  2242. Sys.PropertyChangedEventArgs = function Sys$PropertyChangedEventArgs(propertyName) {
  2243.     /// <param name="propertyName" type="String"></param>
  2244.     var e = Function._validateParams(arguments, [
  2245.         {name: "propertyName", type: String}
  2246.     ]);
  2247.     if (e) throw e;
  2248.     Sys.PropertyChangedEventArgs.initializeBase(this);
  2249.     this._propertyName = propertyName;
  2250. }
  2251.  
  2252.     function Sys$PropertyChangedEventArgs$get_propertyName() {
  2253.         /// <value type="String"></value>
  2254.         if (arguments.length !== 0) throw Error.parameterCount();
  2255.         return this._propertyName;
  2256.     }
  2257. Sys.PropertyChangedEventArgs.prototype = {
  2258.     get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName
  2259. }
  2260. Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs', Sys.EventArgs);
  2261. Sys.INotifyDisposing = function Sys$INotifyDisposing() {
  2262.     if (arguments.length !== 0) throw Error.parameterCount();
  2263.     throw Error.notImplemented();
  2264. }
  2265.     function Sys$INotifyDisposing$add_disposing(handler) {
  2266.     var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2267.     if (e) throw e;
  2268.         throw Error.notImplemented();
  2269.     }
  2270.     function Sys$INotifyDisposing$remove_disposing(handler) {
  2271.     var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2272.     if (e) throw e;
  2273.         throw Error.notImplemented();
  2274.     }
  2275. Sys.INotifyDisposing.prototype = {
  2276.     add_disposing: Sys$INotifyDisposing$add_disposing,
  2277.     remove_disposing: Sys$INotifyDisposing$remove_disposing
  2278. }
  2279. Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing");
  2280. Sys.Component = function Sys$Component() {
  2281.     if (arguments.length !== 0) throw Error.parameterCount();
  2282.     if (Sys.Application) Sys.Application.registerDisposableObject(this);
  2283. }
  2284.     function Sys$Component$get_events() {
  2285.         /// <value type="Sys.EventHandlerList"></value>
  2286.         if (arguments.length !== 0) throw Error.parameterCount();
  2287.         if (!this._events) {
  2288.             this._events = new Sys.EventHandlerList();
  2289.         }
  2290.         return this._events;
  2291.     }
  2292.     function Sys$Component$get_id() {
  2293.         /// <value type="String"></value>
  2294.         if (arguments.length !== 0) throw Error.parameterCount();
  2295.         return this._id;
  2296.     }
  2297.     function Sys$Component$set_id(value) {
  2298.         var e = Function._validateParams(arguments, [{name: "value", type: String}]);
  2299.         if (e) throw e;
  2300.         if (this._idSet) throw Error.invalidOperation(Sys.Res.componentCantSetIdTwice);
  2301.         this._idSet = true;
  2302.         var oldId = this.get_id();
  2303.         if (oldId && Sys.Application.findComponent(oldId)) throw Error.invalidOperation(Sys.Res.componentCantSetIdAfterAddedToApp);
  2304.         this._id = value;
  2305.     }
  2306.     function Sys$Component$get_isInitialized() {
  2307.         /// <value type="Boolean"></value>
  2308.         if (arguments.length !== 0) throw Error.parameterCount();
  2309.         return this._initialized;
  2310.     }
  2311.     function Sys$Component$get_isUpdating() {
  2312.         /// <value type="Boolean"></value>
  2313.         if (arguments.length !== 0) throw Error.parameterCount();
  2314.         return this._updating;
  2315.     }
  2316.     function Sys$Component$add_disposing(handler) {
  2317.         var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2318.         if (e) throw e;
  2319.         this.get_events().addHandler("disposing", handler);
  2320.     }
  2321.     function Sys$Component$remove_disposing(handler) {
  2322.         var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2323.         if (e) throw e;
  2324.         this.get_events().removeHandler("disposing", handler);
  2325.     }
  2326.     function Sys$Component$add_propertyChanged(handler) {
  2327.         var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2328.         if (e) throw e;
  2329.         this.get_events().addHandler("propertyChanged", handler);
  2330.     }
  2331.     function Sys$Component$remove_propertyChanged(handler) {
  2332.         var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
  2333.         if (e) throw e;
  2334.         this.get_events().removeHandler("propertyChanged", handler);
  2335.     }
  2336.     function Sys$Component$beginUpdate() {
  2337.         this._updating = true;
  2338.     }
  2339.     function Sys$Component$dispose() {
  2340.         if (this._events) {
  2341.             var handler = this._events.getHandler("disposing");
  2342.             if (handler) {
  2343.                 handler(this, Sys.EventArgs.Empty);
  2344.             }
  2345.         }
  2346.         delete this._events;
  2347.         Sys.Application.unregisterDisposableObject(this);
  2348.         Sys.Application.removeComponent(this);
  2349.     }
  2350.     function Sys$Component$endUpdate() {
  2351.         this._updating = false;
  2352.         if (!this._initialized) this.initialize();
  2353.         this.updated();
  2354.     }
  2355.     function Sys$Component$initialize() {
  2356.         this._initialized = true;
  2357.     }
  2358.     function Sys$Component$raisePropertyChanged(propertyName) {
  2359.         /// <param name="propertyName" type="String"></param>
  2360.         var e = Function._validateParams(arguments, [
  2361.             {name: "propertyName", type: String}
  2362.         ]);
  2363.         if (e) throw e;
  2364.         if (!this._events) return;
  2365.         var handler = this._events.getHandler("propertyChanged");
  2366.         if (handler) {
  2367.             handler(this, new Sys.PropertyChangedEventArgs(propertyName));
  2368.         }
  2369.     }
  2370.     function Sys$Component$updated() {
  2371.     }
  2372. Sys.Component.prototype = {
  2373.     _id: null,
  2374.     _idSet: false,
  2375.     _initialized: false,
  2376.     _updating: false,
  2377.     get_events: Sys$Component$get_events,
  2378.     get_id: Sys$Component$get_id,
  2379.     set_id: Sys$Component$set_id,
  2380.     get_isInitialized: Sys$Component$get_isInitialized,
  2381.     get_isUpdating: Sys$Component$get_isUpdating,
  2382.     add_disposing: Sys$Component$add_disposing,
  2383.     remove_disposing: Sys$Component$remove_disposing,
  2384.     add_propertyChanged: Sys$Component$add_propertyChanged,
  2385.     remove_propertyChanged: Sys$Component$remove_propertyChanged,
  2386.     beginUpdate: Sys$Component$beginUpdate,
  2387.     dispose: Sys$Component$dispose,
  2388.     endUpdate: Sys$Component$endUpdate,
  2389.     initialize: Sys$Component$initialize,
  2390.     raisePropertyChanged: Sys$Component$raisePropertyChanged,
  2391.     updated: Sys$Component$updated
  2392. }
  2393. Sys.Component.registerClass('Sys.Component', null, Sys.IDisposable, Sys.INotifyPropertyChange, Sys.INotifyDisposing);
  2394. function Sys$Component$_setProperties(target, properties) {
  2395.     /// <param name="target"></param>
  2396.     /// <param name="properties"></param>
  2397.     var e = Function._validateParams(arguments, [
  2398.         {name: "target"},
  2399.         {name: "properties"}
  2400.     ]);
  2401.     if (e) throw e;
  2402.     var current;
  2403.     var targetType = Object.getType(target);
  2404.     var isObject = (targetType === Object) || (targetType === Sys.UI.DomElement);
  2405.     var isComponent = Sys.Component.isInstanceOfType(target) && !target.get_isUpdating();
  2406.     if (isComponent) target.beginUpdate();
  2407.     for (var name in properties) {
  2408.         var val = properties[name];
  2409.         var getter = isObject ? null : target["get_" + name];
  2410.         if (isObject || typeof(getter) !== 'function') {
  2411.                         var targetVal = target[name];
  2412.             if (!isObject && typeof(targetVal) === 'undefined') throw Error.invalidOperation(String.format(Sys.Res.propertyUndefined, name));
  2413.             if (!val || (typeof(val) !== 'object') || (isObject && !targetVal)) {
  2414.                 target[name] = val;
  2415.             }
  2416.             else {
  2417.                 Sys$Component$_setProperties(targetVal, val);
  2418.             }
  2419.         }
  2420.         else {
  2421.             var setter = target["set_" + name];
  2422.             if (typeof(setter) === 'function') {
  2423.                                 setter.apply(target, [val]);
  2424.             }
  2425.             else if (val instanceof Array) {
  2426.                                 current = getter.apply(target);
  2427.                 if (!(current instanceof Array)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNotAnArray, name));
  2428.                 for (var i = 0, j = current.length, l= val.length; i < l; i++, j++) {
  2429.                     current[j] = val[i];
  2430.                 }
  2431.             }
  2432.             else if ((typeof(val) === 'object') && (Object.getType(val) === Object)) {
  2433.                                 current = getter.apply(target);
  2434.                 if ((typeof(current) === 'undefined') || (current === null)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNullOrUndefined, name));
  2435.                 Sys$Component$_setProperties(current, val);
  2436.             }
  2437.             else {
  2438.                                 throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name));
  2439.             }
  2440.         }
  2441.     }
  2442.     if (isComponent) target.endUpdate();
  2443. }
  2444. function Sys$Component$_setReferences(component, references) {
  2445.     for (var name in references) {
  2446.         var setter = component["set_" + name];
  2447.         var reference = $find(references[name]);
  2448.         if (typeof(setter) !== 'function') throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name));
  2449.         if (!reference) throw Error.invalidOperation(String.format(Sys.Res.referenceNotFound, references[name]));
  2450.         setter.apply(component, [reference]);
  2451.     }
  2452. }
  2453. var $create = Sys.Component.create = function Sys$Component$create(type, properties, events, references, element) {
  2454.     /// <param name="type" type="Type"></param>
  2455.     /// <param name="properties" optional="true" mayBeNull="true"></param>
  2456.     /// <param name="events" optional="true" mayBeNull="true"></param>
  2457.     /// <param name="references" optional="true" mayBeNull="true"></param>
  2458.     /// <param name="element" domElement="true" optional="true" mayBeNull="true"></param>
  2459.     /// <returns type="Sys.UI.Component"></returns>
  2460.     var e = Function._validateParams(arguments, [
  2461.         {name: "type", type: Type},
  2462.         {name: "properties", mayBeNull: true, optional: true},
  2463.         {name: "events", mayBeNull: true, optional: true},
  2464.         {name: "references", mayBeNull: true, optional: true},
  2465.         {name: "element", mayBeNull: true, domElement: true, optional: true}
  2466.     ]);
  2467.     if (e) throw e;
  2468.     if (!type.inheritsFrom(Sys.Component)) {
  2469.         throw Error.argument('type', String.format(Sys.Res.createNotComponent, type.getName()));
  2470.     }
  2471.     if (type.inheritsFrom(Sys.UI.Behavior) || type.inheritsFrom(Sys.UI.Control)) {
  2472.         if (!element) throw Error.argument('element', Sys.Res.createNoDom);
  2473.     }
  2474.     else if (element) throw Error.argument('element', Sys.Res.createComponentOnDom);
  2475.     var component = (element ? new type(element): new type());
  2476.     var app = Sys.Application;
  2477.     var creatingComponents = app.get_isCreatingComponents();
  2478.     component.beginUpdate();
  2479.     if (properties) {
  2480.         Sys$Component$_setProperties(component, properties);
  2481.     }
  2482.     if (events) {
  2483.         for (var name in events) {
  2484.             if (!(component["add_" + name] instanceof Function)) throw new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name));
  2485.             if (!(events[name] instanceof Function)) throw new Error.invalidOperation(Sys.Res.eventHandlerNotFunction);
  2486.             component["add_" + name](events[name]);
  2487.         }
  2488.     }
  2489.     app._createdComponents[app._createdComponents.length] = component;
  2490.     if (component.get_id()) {
  2491.         app.addComponent(component);
  2492.     }
  2493.     if (creatingComponents) {
  2494.         if (references) {
  2495.             app._addComponentToSecondPass(component, references);
  2496.         }
  2497.         else {
  2498.             component.endUpdate();
  2499.         }
  2500.     }
  2501.     else {
  2502.         if (references) {
  2503.             Sys$Component$_setReferences(component, references);
  2504.         }
  2505.         component.endUpdate();
  2506.     }
  2507.     return component;
  2508. }
  2509. Sys.UI.MouseButton = function Sys$UI$MouseButton() {
  2510.     /// <field name="leftButton" type="Number" integer="true" static="true"></field>
  2511.     /// <field name="middleButton" type="Number" integer="true" static="true"></field>
  2512.     /// <field name="rightButton" type="Number" integer="true" static="true"></field>
  2513.     if (arguments.length !== 0) throw Error.parameterCount();
  2514.     throw Error.notImplemented();
  2515. }
  2516. Sys.UI.MouseButton.prototype = {
  2517.     leftButton: 0,
  2518.     middleButton: 1,
  2519.     rightButton: 2
  2520. }
  2521. Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton");
  2522. Sys.UI.Key = function Sys$UI$Key() {
  2523.     /// <field name="backspace" type="Number" integer="true" static="true"></field>
  2524.     /// <field name="tab" type="Number" integer="true" static="true"></field>
  2525.     /// <field name="enter" type="Number" integer="true" static="true"></field>
  2526.     /// <field name="esc" type="Number" integer="true" static="true"></field>
  2527.     /// <field name="space" type="Number" integer="true" static="true"></field>
  2528.     /// <field name="pageUp" type="Number" integer="true" static="true"></field>
  2529.     /// <field name="pageDown" type="Number" integer="true" static="true"></field>
  2530.     /// <field name="end" type="Number" integer="true" static="true"></field>
  2531.     /// <field name="home" type="Number" integer="true" static="true"></field>
  2532.     /// <field name="left" type="Number" integer="true" static="true"></field>
  2533.     /// <field name="up" type="Number" integer="true" static="true"></field>
  2534.     /// <field name="right" type="Number" integer="true" static="true"></field>
  2535.     /// <field name="down" type="Number" integer="true" static="true"></field>
  2536.     /// <field name="del" type="Number" integer="true" static="true"></field>
  2537.     if (arguments.length !== 0) throw Error.parameterCount();
  2538.     throw Error.notImplemented();
  2539. }
  2540. Sys.UI.Key.prototype = {
  2541.     backspace: 8,
  2542.     tab: 9,
  2543.     enter: 13,
  2544.     esc: 27,
  2545.     space: 32,
  2546.     pageUp: 33,
  2547.     pageDown: 34,
  2548.     end: 35,
  2549.     home: 36,
  2550.     left: 37,
  2551.     up: 38,
  2552.     right: 39,
  2553.     down: 40,
  2554.     del: 127
  2555. }
  2556. Sys.UI.Key.registerEnum("Sys.UI.Key");
  2557. Sys.UI.DomEvent = function Sys$UI$DomEvent(eventObject) {
  2558.     /// <param name="eventObject"></param>
  2559.     /// <field name="altKey" type="Boolean"></field>
  2560.     /// <field name="button" type="Sys.UI.MouseButton"></field>
  2561.     /// <field name="charCode" type="Number" integer="true"></field>
  2562.     /// <field name="clientX" type="Number" integer="true"></field>
  2563.     /// <field name="clientY" type="Number" integer="true"></field>
  2564.     /// <field name="ctrlKey" type="Boolean"></field>
  2565.     /// <field name="keyCode" type="Number" integer="true"></field>
  2566.     /// <field name="offsetX" type="Number" integer="true"></field>
  2567.     /// <field name="offsetY" type="Number" integer="true"></field>
  2568.     /// <field name="screenX" type="Number" integer="true"></field>
  2569.     /// <field name="screenY" type="Number" integer="true"></field>
  2570.     /// <field name="shiftKey" type="Boolean"></field>
  2571.     /// <field name="target" domElement="true"></field>
  2572.     /// <field name="type" type="String"></field>
  2573.     var e = Function._validateParams(arguments, [
  2574.         {name: "eventObject"}
  2575.     ]);
  2576.     if (e) throw e;
  2577.     var e = eventObject;
  2578.     this.rawEvent = e;
  2579.     this.altKey = e.altKey;
  2580.     if (typeof(e.button) !== 'undefined') {
  2581.         this.button = (typeof(e.which) !== 'undefined') ? e.button :
  2582.             (e.button === 4) ? Sys.UI.MouseButton.middleButton :
  2583.             (e.button === 2) ? Sys.UI.MouseButton.rightButton :
  2584.             Sys.UI.MouseButton.leftButton;
  2585.     }
  2586.     if (e.type === 'keypress') {
  2587.         this.charCode = e.charCode || e.keyCode;
  2588.     }
  2589.     else if (e.keyCode && (e.keyCode === 46)) {
  2590.         this.keyCode = 127;
  2591.     }
  2592.     else {
  2593.         this.keyCode = e.keyCode;
  2594.     }
  2595.     this.clientX = e.clientX;
  2596.     this.clientY = e.clientY;
  2597.     this.ctrlKey = e.ctrlKey;
  2598.     this.target = e.target ? e.target : e.srcElement;
  2599.     if (this.target) {
  2600.         var loc = Sys.UI.DomElement.getLocation(this.target);
  2601.         this.offsetX = (typeof(e.offsetX) !== 'undefined') ? e.offsetX : window.pageXOffset + (e.clientX || 0) - loc.x;
  2602.         this.offsetY = (typeof(e.offsetY) !== 'undefined') ? e.offsetY : window.pageYOffset + (e.clientY || 0) - loc.y;
  2603.     }
  2604.     this.screenX = e.screenX;
  2605.     this.screenY = e.screenY;
  2606.     this.shiftKey = e.shiftKey;
  2607.     this.type = e.type;
  2608. }
  2609.     function Sys$UI$DomEvent$preventDefault() {
  2610.         if (arguments.length !== 0) throw Error.parameterCount();
  2611.         if (this.rawEvent.preventDefault) {
  2612.             this.rawEvent.preventDefault();
  2613.         }
  2614.         else if (window.event) {
  2615.             window.event.returnValue = false;
  2616.         }
  2617.     }
  2618.     function Sys$UI$DomEvent$stopPropagation() {
  2619.         if (arguments.length !== 0) throw Error.parameterCount();
  2620.         if (this.rawEvent.stopPropagation) {
  2621.             this.rawEvent.stopPropagation();
  2622.         }
  2623.         else if (window.event) {
  2624.             window.event.cancelBubble = true;
  2625.         }
  2626.     }
  2627. Sys.UI.DomEvent.prototype = {
  2628.     preventDefault: Sys$UI$DomEvent$preventDefault,
  2629.     stopPropagation: Sys$UI$DomEvent$stopPropagation
  2630. }
  2631. Sys.UI.DomEvent.registerClass('Sys.UI.DomEvent');
  2632. var $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler) {
  2633.     /// <param name="element" domElement="true"></param>
  2634.     /// <param name="eventName" type="String"></param>
  2635.     /// <param name="handler" type="Function"></param>
  2636.     var e = Function._validateParams(arguments, [
  2637.         {name: "element", domElement: true},
  2638.         {name: "eventName", type: String},
  2639.         {name: "handler", type: Function}
  2640.     ]);
  2641.     if (e) throw e;
  2642.     if (!element._events) {
  2643.         element._events = {};
  2644.     }
  2645.     var eventCache = element._events[eventName];
  2646.     if (!eventCache) {
  2647.         element._events[eventName] = eventCache = [];
  2648.     }
  2649.     var browserHandler;
  2650.     if (element.addEventListener) {
  2651.         browserHandler = function(e) {
  2652.             return handler.call(element, new Sys.UI.DomEvent(e));
  2653.         }
  2654.         element.addEventListener(eventName, browserHandler, false);
  2655.     }
  2656.     else if (element.attachEvent) {
  2657.         browserHandler = function() {
  2658.             return handler.call(element, new Sys.UI.DomEvent(window.event));
  2659.         }
  2660.         element.attachEvent('on' + eventName, browserHandler);
  2661.     }
  2662.     eventCache[eventCache.length] = {handler: handler, browserHandler: browserHandler};
  2663. }
  2664. var $addHandlers = Sys.UI.DomEvent.addHandlers = function Sys$UI$DomEvent$addHandlers(element, events, handlerOwner) {
  2665.     /// <param name="element" domElement="true"></param>
  2666.     /// <param name="events" type="Object"></param>
  2667.     /// <param name="handlerOwner" optional="true"></param>
  2668.     var e = Function._validateParams(arguments, [
  2669.         {name: "element", domElement: true},
  2670.         {name: "events", type: Object},
  2671.         {name: "handlerOwner", optional: true}
  2672.     ]);
  2673.     if (e) throw e;
  2674.     for (var name in events) {
  2675.         var handler = events[name];
  2676.         if (typeof(handler) !== 'function') throw Error.invalidOperation(Sys.Res.cantAddNonFunctionhandler);
  2677.         if (handlerOwner) {
  2678.             handler = Function.createDelegate(handlerOwner, handler);
  2679.         }
  2680.         $addHandler(element, name, handler);
  2681.     }
  2682. }
  2683. var $clearHandlers = Sys.UI.DomEvent.clearHandlers = function Sys$UI$DomEvent$clearHandlers(element) {
  2684.     /// <param name="element" domElement="true"></param>
  2685.     var e = Function._validateParams(arguments, [
  2686.         {name: "element", domElement: true}
  2687.     ]);
  2688.     if (e) throw e;
  2689.     if (element._events) {
  2690.         var cache = element._events;
  2691.         for (var name in cache) {
  2692.             var handlers = cache[name];
  2693.             for (var i = handlers.length - 1; i >= 0; i--) {
  2694.                 $removeHandler(element, name, handlers[i].handler);
  2695.             }
  2696.         }
  2697.         element._events = null;
  2698.     }
  2699. }
  2700. var $removeHandler = Sys.UI.DomEvent.removeHandler = function Sys$UI$DomEvent$removeHandler(element, eventName, handler) {
  2701.     /// <param name="element" domElement="true"></param>
  2702.     /// <param name="eventName" type="String"></param>
  2703.     /// <param name="handler" type="Function"></param>
  2704.     var e = Function._validateParams(arguments, [
  2705.         {name: "element", domElement: true},
  2706.         {name: "eventName", type: String},
  2707.         {name: "handler", type: Function}
  2708.     ]);
  2709.     if (e) throw e;
  2710.     var browserHandler = null;
  2711.     if ((typeof(element._events) !== 'object') || (element._events == null)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);
  2712.     var cache = element._events[eventName];
  2713.     if (!(cache instanceof Array)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);
  2714.     var browserHandler = null;
  2715.     for (var i = 0, l = cache.length; i < l; i++) {
  2716.         if (cache[i].handler === handler) {
  2717.             browserHandler = cache[i].browserHandler;
  2718.             break;
  2719.         }
  2720.     }
  2721.     if (typeof(browserHandler) !== 'function') throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);
  2722.     if (element.removeEventListener) {
  2723.         element.removeEventListener(eventName, browserHandler, false);
  2724.     }
  2725.     else if (element.detachEvent) {
  2726.         element.detachEvent('on' + eventName, browserHandler);
  2727.     }
  2728.     cache.splice(i, 1);
  2729. }
  2730. Sys.IContainer = function Sys$IContainer() {
  2731.     throw Error.notImplemented();
  2732. }
  2733.     function Sys$IContainer$addComponent(component) {
  2734.         /// <param name="component" type="Sys.Component"></param>
  2735.         var e = Function._validateParams(arguments, [
  2736.             {name: "component", type: Sys.Component}
  2737.         ]);
  2738.         if (e) throw e;
  2739.         throw Error.notImplemented();
  2740.     }
  2741.     function Sys$IContainer$removeComponent(component) {
  2742.         /// <param name="component" type="Sys.Component"></param>
  2743.         var e = Function._validateParams(arguments, [
  2744.             {name: "component", type: Sys.Component}
  2745.         ]);
  2746.         if (e) throw e;
  2747.         throw Error.notImplemented();
  2748.     }
  2749.     function Sys$IContainer$findComponent(id) {
  2750.         /// <param name="id" type="String"></param>
  2751.         /// <returns type="Sys.Component"></returns>
  2752.         var e = Function._validateParams(arguments, [
  2753.             {name: "id", type: String}
  2754.         ]);
  2755.         if (e) throw e;
  2756.         throw Error.notImplemented();
  2757.     }
  2758.     function Sys$IContainer$getComponents() {
  2759.         /// <returns type="Array" elementType="Sys.Component"></returns>
  2760.         if (arguments.length !== 0) throw Error.parameterCount();
  2761.         throw Error.notImplemented();
  2762.     }
  2763. Sys.IContainer.prototype = {
  2764.     addComponent: Sys$IContainer$addComponent,
  2765.     removeComponent: Sys$IContainer$removeComponent,
  2766.     findComponent: Sys$IContainer$findComponent,
  2767.     getComponents: Sys$IContainer$getComponents
  2768. }
  2769. Sys.IContainer.registerInterface("Sys.IContainer");
  2770. Sys._ScriptLoader = function Sys$_ScriptLoader() {
  2771.     this._scriptsToLoad = null;
  2772.     this._scriptLoadedDelegate = Function.createDelegate(this, this._scriptLoadedHandler);
  2773. }
  2774.     function Sys$_ScriptLoader$dispose() {
  2775.         this._stopLoading();
  2776.         if(this._events) {
  2777.             delete this._events;
  2778.         }
  2779.         this._scriptLoadedDelegate = null;        
  2780.     }
  2781.     function Sys$_ScriptLoader$loadScripts(scriptTimeout, allScriptsLoadedCallback, scriptLoadFailedCallback, scriptLoadTimeoutCallback) {
  2782.         /// <param name="scriptTimeout" type="Number" integer="true"></param>
  2783.         /// <param name="allScriptsLoadedCallback" type="Function" mayBeNull="true"></param>
  2784.         /// <param name="scriptLoadFailedCallback" type="Function" mayBeNull="true"></param>
  2785.         /// <param name="scriptLoadTimeoutCallback" type="Function" mayBeNull="true"></param>
  2786.         var e = Function._validateParams(arguments, [
  2787.             {name: "scriptTimeout", type: Number, integer: true},
  2788.             {name: "allScriptsLoadedCallback", type: Function, mayBeNull: true},
  2789.             {name: "scriptLoadFailedCallback", type: Function, mayBeNull: true},
  2790.             {name: "scriptLoadTimeoutCallback", type: Function, mayBeNull: true}
  2791.         ]);
  2792.         if (e) throw e;
  2793.         if(this._loading) {
  2794.             throw Error.invalidOperation(Sys.Res.scriptLoaderAlreadyLoading);
  2795.         }
  2796.         this._loading = true;
  2797.         this._allScriptsLoadedCallback = allScriptsLoadedCallback;
  2798.         this._scriptLoadFailedCallback = scriptLoadFailedCallback;
  2799.         this._scriptLoadTimeoutCallback = scriptLoadTimeoutCallback;
  2800.         
  2801.         this._loadScriptsInternal();
  2802.     }
  2803.     function Sys$_ScriptLoader$notifyScriptLoaded() {
  2804.         if (arguments.length !== 0) throw Error.parameterCount();
  2805.         
  2806.                         if(!this._loading) {
  2807.                                     return;
  2808.         }
  2809.         this._currentTask._notified++;
  2810.         
  2811.         if(Sys.Browser.agent === Sys.Browser.Safari) {           
  2812.             if(this._currentTask._notified === 1) {
  2813.                                                                                                                 window.setTimeout(Function.createDelegate(this, function() {
  2814.                     this._scriptLoadedHandler(this._currentTask.get_scriptElement(), true);
  2815.                 }), 0);
  2816.             }
  2817.         }
  2818.                             }
  2819.     function Sys$_ScriptLoader$queueCustomScriptTag(scriptAttributes) {
  2820.         /// <param name="scriptAttributes" mayBeNull="false"></param>
  2821.         var e = Function._validateParams(arguments, [
  2822.             {name: "scriptAttributes"}
  2823.         ]);
  2824.         if (e) throw e;
  2825.         if(!this._scriptsToLoad) {
  2826.             this._scriptsToLoad = [];
  2827.         }
  2828.         Array.add(this._scriptsToLoad, scriptAttributes);
  2829.     }
  2830.     function Sys$_ScriptLoader$queueScriptBlock(scriptContent) {
  2831.         /// <param name="scriptContent" type="String" mayBeNull="false"></param>
  2832.         var e = Function._validateParams(arguments, [
  2833.             {name: "scriptContent", type: String}
  2834.         ]);
  2835.         if (e) throw e;
  2836.         if(!this._scriptsToLoad) {
  2837.             this._scriptsToLoad = [];
  2838.         }
  2839.         Array.add(this._scriptsToLoad, {text: scriptContent});
  2840.     }
  2841.     function Sys$_ScriptLoader$queueScriptReference(scriptUrl) {
  2842.         /// <param name="scriptUrl" type="String" mayBeNull="false"></param>
  2843.         var e = Function._validateParams(arguments, [
  2844.             {name: "scriptUrl", type: String}
  2845.         ]);
  2846.         if (e) throw e;
  2847.         if(!this._scriptsToLoad) {
  2848.             this._scriptsToLoad = [];
  2849.         }
  2850.         Array.add(this._scriptsToLoad, {src: scriptUrl});
  2851.     }
  2852.     function Sys$_ScriptLoader$_createScriptElement(queuedScript) {
  2853.         var scriptElement = document.createElement('SCRIPT');
  2854.                         scriptElement.type = 'text/javascript';
  2855.                 for (var attr in queuedScript) {
  2856.             scriptElement[attr] = queuedScript[attr];
  2857.         }
  2858.         
  2859.         return scriptElement;
  2860.     }
  2861.     function Sys$_ScriptLoader$_loadScriptsInternal() {
  2862.                 if (this._scriptsToLoad && this._scriptsToLoad.length > 0) {
  2863.             var nextScript = Array.dequeue(this._scriptsToLoad);
  2864.                         var scriptElement = this._createScriptElement(nextScript);
  2865.             
  2866.             if (scriptElement.text && Sys.Browser.agent === Sys.Browser.Safari) {
  2867.                                 scriptElement.innerHTML = scriptElement.text;
  2868.                 delete scriptElement.text;
  2869.             }            
  2870.                                                             if (typeof(nextScript.src) === "string") {
  2871.                                 this._currentTask = new Sys._ScriptLoaderTask(scriptElement, this._scriptLoadedDelegate);
  2872.                                                                                 this._currentTask.execute();
  2873.             }
  2874.             else {
  2875.                                                 document.getElementsByTagName('HEAD')[0].appendChild(scriptElement);
  2876.                 
  2877.                                 Sys._ScriptLoader._clearScript(scriptElement);
  2878.                                                                 this._loadScriptsInternal();
  2879.             }
  2880.         }
  2881.         else {
  2882.                         var callback = this._allScriptsLoadedCallback;
  2883.             this._stopLoading();
  2884.             if(callback) {
  2885.                 callback(this);
  2886.             }
  2887.         }
  2888.     }
  2889.     function Sys$_ScriptLoader$_raiseError(multipleCallbacks) {
  2890.                 var callback = this._scriptLoadFailedCallback;
  2891.         var scriptElement = this._currentTask.get_scriptElement();
  2892.         this._stopLoading();
  2893.         
  2894.         if(callback) {
  2895.             callback(this, scriptElement, multipleCallbacks);
  2896.         }
  2897.         else {
  2898.             throw Sys._ScriptLoader._errorScriptLoadFailed(scriptElement.src, multipleCallbacks);
  2899.         }
  2900.     }
  2901.     function Sys$_ScriptLoader$_scriptLoadedHandler(scriptElement, loaded) {
  2902.                                 if(loaded && this._currentTask._notified) {
  2903.             if(this._currentTask._notified > 1) {