PageSourceSearch

https://www.albertahealthservices.ca/FindHealth/ScriptResource.axd…h9zI-L4u8SRJkatZu5ChX9E1&t=ffffffffbec1863d

js albertahealthservices.ca collected 2026-09-24 08:35:53 UTC 319,867 bytes, 7,181 lines download raw bytes

1// Name:        MicrosoftAjax.debug.js
2// Assembly:    System.Web.Extensions
3// Version:     4.0.0.0
4// FileVersion: 4.8.4805.0
5//-----------------------------------------------------------------------
6// Copyright (C) Microsoft Corporation. All rights reserved.
7//-----------------------------------------------------------------------
8// MicrosoftAjax.js
9// Microsoft AJAX Framework.
10 
11Function.__typeName = 'Function';
12Function.__class = true;
13Function.createCallback = function Function$createCallback(method, context) {
14    /// <summary locid="M:J#Function.createCallback" />
15    /// <param name="method" type="Function"></param>
16    /// <param name="context" mayBeNull="true"></param>
17    /// <returns type="Function"></returns>
18    var e = Function._validateParams(arguments, [
19        {name: "method", type: Function},
20        {name: "context", mayBeNull: true}
21    ]);
22    if (e) throw e;
23    return function() {
24        var l = arguments.length;
25        if (l > 0) {
26            var args = [];
27            for (var i = 0; i < l; i++) {
28                args[i] = arguments[i];
29            }
30            args[l] = context;
31            return method.apply(this, args);
32        }
33        return method.call(this, context);
34    }
35}
36Function.createDelegate = function Function$createDelegate(instance, method) {
37    /// <summary locid="M:J#Function.createDelegate" />
38    /// <param name="instance" mayBeNull="true"></param>
39    /// <param name="method" type="Function"></param>
40    /// <returns type="Function"></returns>
41    var e = Function._validateParams(arguments, [
42        {name: "instance", mayBeNull: true},
43        {name: "method", type: Function}
44    ]);
45    if (e) throw e;
46    return function() {
47        return method.apply(instance, arguments);
48    }
49}
50Function.emptyFunction = Function.emptyMethod = function Function$emptyMethod() {
51    /// <summary locid="M:J#Function.emptyMethod" />
52}
53Function.validateParameters = function Function$validateParameters(parameters, expectedParameters, validateParameterCount) {
54    /// <summary locid="M:J#Function.validateParameters" />
55    /// <param name="parameters"></param>
56    /// <param name="expectedParameters"></param>
57    /// <param name="validateParameterCount" type="Boolean" optional="true"></param>
58    /// <returns type="Error" mayBeNull="true"></returns>
59    var e = Function._validateParams(arguments, [
60        {name: "parameters"},
61        {name: "expectedParameters"},
62        {name: "validateParameterCount", type: Boolean, optional: true}
63    ]);
64    if (e) throw e;
65    return Function._validateParams(parameters, expectedParameters, validateParameterCount);
66}
67Function._validateParams = function Function$_validateParams(params, expectedParams, validateParameterCount) {
68    var e, expectedLength = expectedParams.length;
69    validateParameterCount = validateParameterCount || (typeof(validateParameterCount) === "undefined");
70    e = Function._validateParameterCount(params, expectedParams, validateParameterCount);
71    if (e) {
72        e.popStackFrame();
73        return e;
74    }
75    for (var i = 0, l = params.length; i < l; i++) {
76        var expectedParam = expectedParams[Math.min(i, expectedLength - 1)],
77            paramName = expectedParam.name;
78        if (expectedParam.parameterArray) {
79            paramName += "[" + (i - expectedLength + 1) + "]";
80        }
81        else if (!validateParameterCount && (i >= expectedLength)) {
82            break;
83        }
84        e = Function._validateParameter(params[i], expectedParam, paramName);
85        if (e) {
86            e.popStackFrame();
87            return e;
88        }
89    }
90    return null;
91}
92Function._validateParameterCount = function Function$_validateParameterCount(params, expectedParams, validateParameterCount) {
93    var i, error,
94        expectedLen = expectedParams.length,
95        actualLen = params.length;
96    if (actualLen < expectedLen) {
97        var minParams = expectedLen;
98        for (i = 0; i < expectedLen; i++) {
99            var param = expectedParams[i];
100            if (param.optional || param.parameterArray) {
101                minParams--;
102            }
103        }        
104        if (actualLen < minParams) {
105            error = true;
106        }
107    }
108    else if (validateParameterCount && (actualLen > expectedLen)) {
109        error = true;      
110        for (i = 0; i < expectedLen; i++) {
111            if (expectedParams[i].parameterArray) {
112                error = false; 
113                break;
114            }
115        }  
116    }
117    if (error) {
118        var e = Error.parameterCount();
119        e.popStackFrame();
120        return e;
121    }
122    return null;
123}
124Function._validateParameter = function Function$_validateParameter(param, expectedParam, paramName) {
125    var e,
126        expectedType = expectedParam.type,
127        expectedInteger = !!expectedParam.integer,
128        expectedDomElement = !!expectedParam.domElement,
129        mayBeNull = !!expectedParam.mayBeNull;
130    e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName);
131    if (e) {
132        e.popStackFrame();
133        return e;
134    }
135    var expectedElementType = expectedParam.elementType,
136        elementMayBeNull = !!expectedParam.elementMayBeNull;
137    if (expectedType === Array && typeof(param) !== "undefined" && param !== null &&
138        (expectedElementType || !elementMayBeNull)) {
139        var expectedElementInteger = !!expectedParam.elementInteger,
140            expectedElementDomElement = !!expectedParam.elementDomElement;
141        for (var i=0; i < param.length; i++) {
142            var elem = param[i];
143            e = Function._validateParameterType(elem, expectedElementType,
144                expectedElementInteger, expectedElementDomElement, elementMayBeNull,
145                paramName + "[" + i + "]");
146            if (e) {
147                e.popStackFrame();
148                return e;
149            }
150        }
151    }
152    return null;
153}
154Function._validateParameterType = function Function$_validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) {
155    var e, i;
156    if (typeof(param) === "undefined") {
157        if (mayBeNull) {
158            return null;
159        }
160        else {
161            e = Error.argumentUndefined(paramName);
162            e.popStackFrame();
163            return e;
164        }
165    }
166    if (param === null) {
167        if (mayBeNull) {
168            return null;
169        }
170        else {
171            e = Error.argumentNull(paramName);
172            e.popStackFrame();
173            return e;
174        }
175    }
176    if (expectedType && expectedType.__enum) {
177        if (typeof(param) !== 'number') {
178            e = Error.argumentType(paramName, Object.getType(param), expectedType);
179            e.popStackFrame();
180            return e;
181        }
182        if ((param % 1) === 0) {
183            var values = expectedType.prototype;
184            if (!expectedType.__flags || (param === 0)) {
185                for (i in values) {
186                    if (values[i] === param) return null;
187                }
188            }
189            else {
190                var v = param;
191                for (i in values) {
192                    var vali = values[i];
193                    if (vali === 0) continue;
194                    if ((vali & param) === vali) {
195                        v -= vali;
196                    }
197                    if (v === 0) return null;
198                }
199            }
200        }
201        e = Error.argumentOutOfRange(paramName, param, String.format(Sys.Res.enumInvalidValue, param, expectedType.getName()));
202        e.popStackFrame();
203        return e;
204    }
205    if (expectedDomElement && (!Sys._isDomElement(param) || (param.nodeType === 3))) {
206        e = Error.argument(paramName, Sys.Res.argumentDomElement);
207        e.popStackFrame();
208        return e;
209    }
210    if (expectedType && !Sys._isInstanceOfType(expectedType, param)) {
211        e = Error.argumentType(paramName, Object.getType(param), expectedType);
212        e.popStackFrame();
213        return e;
214    }
215    if (expectedType === Number && expectedInteger) {
216        if ((param % 1) !== 0) {
217            e = Error.argumentOutOfRange(paramName, param, Sys.Res.argumentInteger);
218            e.popStackFrame();
219            return e;
220        }
221    }
222    return null;
223}
224 
225Error.__typeName = 'Error';
226Error.__class = true;
227Error.create = function Error$create(message, errorInfo) {
228    /// <summary locid="M:J#Error.create" />
229    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
230    /// <param name="errorInfo" optional="true" mayBeNull="true"></param>
231    /// <returns type="Error"></returns>
232    var e = Function._validateParams(arguments, [
233        {name: "message", type: String, mayBeNull: true, optional: true},
234        {name: "errorInfo", mayBeNull: true, optional: true}
235    ]);
236    if (e) throw e;
237    var err = new Error(message);
238    err.message = message;
239    if (errorInfo) {
240        for (var v in errorInfo) {
241            err[v] = errorInfo[v];
242        }
243    }
244    err.popStackFrame();
245    return err;
246}
247Error.argument = function Error$argument(paramName, message) {
248    /// <summary locid="M:J#Error.argument" />
249    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
250    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
251    /// <returns></returns>
252    var e = Function._validateParams(arguments, [
253        {name: "paramName", type: String, mayBeNull: true, optional: true},
254        {name: "message", type: String, mayBeNull: true, optional: true}
255    ]);
256    if (e) throw e;
257    var displayMessage = "Sys.ArgumentException: " + (message ? message : Sys.Res.argument);
258    if (paramName) {
259        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);
260    }
261    var err = Error.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName });
262    err.popStackFrame();
263    return err;
264}
265Error.argumentNull = function Error$argumentNull(paramName, message) {
266    /// <summary locid="M:J#Error.argumentNull" />
267    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
268    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
269    /// <returns></returns>
270    var e = Function._validateParams(arguments, [
271        {name: "paramName", type: String, mayBeNull: true, optional: true},
272        {name: "message", type: String, mayBeNull: true, optional: true}
273    ]);
274    if (e) throw e;
275    var displayMessage = "Sys.ArgumentNullException: " + (message ? message : Sys.Res.argumentNull);
276    if (paramName) {
277        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);
278    }
279    var err = Error.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName });
280    err.popStackFrame();
281    return err;
282}
283Error.argumentOutOfRange = function Error$argumentOutOfRange(paramName, actualValue, message) {
284    /// <summary locid="M:J#Error.argumentOutOfRange" />
285    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
286    /// <param name="actualValue" optional="true" mayBeNull="true"></param>
287    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
288    /// <returns></returns>
289    var e = Function._validateParams(arguments, [
290        {name: "paramName", type: String, mayBeNull: true, optional: true},
291        {name: "actualValue", mayBeNull: true, optional: true},
292        {name: "message", type: String, mayBeNull: true, optional: true}
293    ]);
294    if (e) throw e;
295    var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : 
295Sys.Res.argumentOutOfRange);
296    if (paramName) {
297        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);
298    }
299    if (typeof(actualValue) !== "undefined" && actualValue !== null) {
300        displayMessage += "\n" + String.format(Sys.Res.actualValue, actualValue);
301    }
302    var err = Error.create(displayMessage, {
303        name: "Sys.ArgumentOutOfRangeException",
304        paramName: paramName,
305        actualValue: actualValue
306    });
307    err.popStackFrame();
308    return err;
309}
310Error.argumentType = function Error$argumentType(paramName, actualType, expectedType, message) {
311    /// <summary locid="M:J#Error.argumentType" />
312    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
313    /// <param name="actualType" type="Type" optional="true" mayBeNull="true"></param>
314    /// <param name="expectedType" type="Type" optional="true" mayBeNull="true"></param>
315    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
316    /// <returns></returns>
317    var e = Function._validateParams(arguments, [
318        {name: "paramName", type: String, mayBeNull: true, optional: true},
319        {name: "actualType", type: Type, mayBeNull: true, optional: true},
320        {name: "expectedType", type: Type, mayBeNull: true, optional: true},
321        {name: "message", type: String, mayBeNull: true, optional: true}
322    ]);
323    if (e) throw e;
324    var displayMessage = "Sys.ArgumentTypeException: ";
325    if (message) {
326        displayMessage += message;
327    }
328    else if (actualType && expectedType) {
329        displayMessage +=
330            String.format(Sys.Res.argumentTypeWithTypes, actualType.getName(), expectedType.getName());
331    }
332    else {
333        displayMessage += Sys.Res.argumentType;
334    }
335    if (paramName) {
336        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);
337    }
338    var err = Error.create(displayMessage, {
339        name: "Sys.ArgumentTypeException",
340        paramName: paramName,
341        actualType: actualType,
342        expectedType: expectedType
343    });
344    err.popStackFrame();
345    return err;
346}
347Error.argumentUndefined = function Error$argumentUndefined(paramName, message) {
348    /// <summary locid="M:J#Error.argumentUndefined" />
349    /// <param name="paramName" type="String" optional="true" mayBeNull="true"></param>
350    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
351    /// <returns></returns>
352    var e = Function._validateParams(arguments, [
353        {name: "paramName", type: String, mayBeNull: true, optional: true},
354        {name: "message", type: String, mayBeNull: true, optional: true}
355    ]);
356    if (e) throw e;
357    var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : Sys.Res.argumentUndefined);
358    if (paramName) {
359        displayMessage += "\n" + String.format(Sys.Res.paramName, paramName);
360    }
361    var err = Error.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName });
362    err.popStackFrame();
363    return err;
364}
365Error.format = function Error$format(message) {
366    /// <summary locid="M:J#Error.format" />
367    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
368    /// <returns></returns>
369    var e = Function._validateParams(arguments, [
370        {name: "message", type: String, mayBeNull: true, optional: true}
371    ]);
372    if (e) throw e;
373    var displayMessage = "Sys.FormatException: " + (message ? message : Sys.Res.format);
374    var err = Error.create(displayMessage, {name: 'Sys.FormatException'});
375    err.popStackFrame();
376    return err;
377}
378Error.invalidOperation = function Error$invalidOperation(message) {
379    /// <summary locid="M:J#Error.invalidOperation" />
380    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
381    /// <returns></returns>
382    var e = Function._validateParams(arguments, [
383        {name: "message", type: String, mayBeNull: true, optional: true}
384    ]);
385    if (e) throw e;
386    var displayMessage = "Sys.InvalidOperationException: " + (message ? message : 
386Sys.Res.invalidOperation);
387    var err = Error.create(displayMessage, {name: 'Sys.InvalidOperationException'});
388    err.popStackFrame();
389    return err;
390}
391Error.notImplemented = function Error$notImplemented(message) {
392    /// <summary locid="M:J#Error.notImplemented" />
393    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
394    /// <returns></returns>
395    var e = Function._validateParams(arguments, [
396        {name: "message", type: String, mayBeNull: true, optional: true}
397    ]);
398    if (e) throw e;
399    var displayMessage = "Sys.NotImplementedException: " + (message ? message : Sys.Res.notImplemented);
400    var err = Error.create(displayMessage, {name: 'Sys.NotImplementedException'});
401    err.popStackFrame();
402    return err;
403}
404Error.parameterCount = function Error$parameterCount(message) {
405    /// <summary locid="M:J#Error.parameterCount" />
406    /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
407    /// <returns></returns>
408    var e = Function._validateParams(arguments, [
409        {name: "message", type: String, mayBeNull: true, optional: true}
410    ]);
411    if (e) throw e;
412    var displayMessage = "Sys.ParameterCountException: " + (message ? message : Sys.Res.parameterCount);
413    var err = Error.create(displayMessage, {name: 'Sys.ParameterCountException'});
414    err.popStackFrame();
415    return err;
416}
417Error.prototype.popStackFrame = function Error$popStackFrame() {
418    /// <summary locid="M:J#checkParam" />
419    if (arguments.length !== 0) throw Error.parameterCount();
420    if (typeof(this.stack) === "undefined" || this.stack === null ||
421        typeof(this.fileName) === "undefined" || this.fileName === null ||
422        typeof(this.lineNumber) === "undefined" || this.lineNumber === null) {
423        return;
424    }
425    var stackFrames = this.stack.split("\n");
426    var currentFrame = stackFrames[0];
427    var pattern = this.fileName + ":" + this.lineNumber;
428    while(typeof(currentFrame) !== "undefined" &&
429          currentFrame !== null &&
430          currentFrame.indexOf(pattern) === -1) {
431        stackFrames.shift();
432        currentFrame = stackFrames[0];
433    }
434    var nextFrame = stackFrames[1];
435    if (typeof(nextFrame) === "undefined" || nextFrame === null) {
436        return;
437    }
438    var nextFrameParts = nextFrame.match(/@(.*):(\d+)$/);
439    if (typeof(nextFrameParts) === "undefined" || nextFrameParts === null) {
440        return;
441    }
442    this.fileName = nextFrameParts[1];
443    this.lineNumber = parseInt(nextFrameParts[2]);
444    stackFrames.shift();
445    this.stack = stackFrames.join("\n");
446}
447 
448Object.__typeName = 'Object';
449Object.__class = true;
450Object.getType = function Object$getType(instance) {
451    /// <summary locid="M:J#Object.getType" />
452    /// <param name="instance"></param>
453    /// <returns type="Type"></returns>
454    var e = Function._validateParams(arguments, [
455        {name: "instance"}
456    ]);
457    if (e) throw e;
458    var ctor = instance.constructor;
459    if (!ctor || (typeof(ctor) !== "function") || !ctor.__typeName || (ctor.__typeName === 'Object')) {
460        return Object;
461    }
462    return ctor;
463}
464Object.getTypeName = function Object$getTypeName(instance) {
465    /// <summary locid="M:J#Object.getTypeName" />
466    /// <param name="instance"></param>
467    /// <returns type="String"></returns>
468    var e = Function._validateParams(arguments, [
469        {name: "instance"}
470    ]);
471    if (e) throw e;
472    return Object.getType(instance).getName();
473}
474 
475String.__typeName = 'String';
476String.__class = true;
477String.prototype.endsWith = function String$endsWith(suffix) {
478    /// <summary locid="M:J#String.endsWith" />
479    /// <param name="suffix" type="String"></param>
480    /// <returns type="Boolean"></returns>
481    var e = Function._validateParams(arguments, [
482        {name: "suffix", type: String}
483    ]);
484    if (e) throw e;
485    return (this.substr(this.length - suffix.length) === suffix);
486}
487String.prototype.startsWith = function String$startsWith(prefix) {
488    /// <summary locid="M:J#String.startsWith" />
489    /// <param name="prefix" type="String"></param>
490    /// <returns type="Boolean"></returns>
491    var e = Function._validateParams(arguments, [
492        {name: "prefix", type: String}
493    ]);
494    if (e) throw e;
495    return (this.substr(0, prefix.length) === prefix);
496}
497String.prototype.trim = function String$trim() {
498    /// <summary locid="M:J#String.trim" />
499    /// <returns type="String"></returns>
500    if (arguments.length !== 0) throw Error.parameterCount();
501    return this.replace(/^\s+|\s+$/g, '');
502}
503String.prototype.trimEnd = function String$trimEnd() {
504    /// <summary locid="M:J#String.trimEnd" />
505    /// <returns type="String"></returns>
506    if (arguments.length !== 0) throw Error.parameterCount();
507    return this.replace(/\s+$/, '');
508}
509String.prototype.trimStart = function String$trimStart() {
510    /// <summary locid="M:J#String.trimStart" />
511    /// <returns type="String"></returns>
512    if (arguments.length !== 0) throw Error.parameterCount();
513    return this.replace(/^\s+/, '');
514}
515String.format = function String$format(format, args) {
516    /// <summary locid="M:J#String.format" />
517    /// <param name="format" type="String"></param>
518    /// <param name="args" parameterArray="true" mayBeNull="true"></param>
519    /// <returns type="String"></returns>
520    var e = Function._validateParams(arguments, [
521        {name: "format", type: String},
522        {name: "args", mayBeNull: true, parameterArray: true}
523    ]);
524    if (e) throw e;
525    return String._toFormattedString(false, arguments);
526}
527String._toFormattedString = function String$_toFormattedString(useLocale, args) {
528    var result = '';
529    var format = args[0];
530    for (var i=0;;) {
531        var open = format.indexOf('{', i);
532        var close = format.indexOf('}', i);
533        if ((open < 0) && (close < 0)) {
534            result += format.slice(i);
535            break;
536        }
537        if ((close > 0) && ((close < open) || (open < 0))) {
538            if (format.charAt(close + 1) !== '}') {
539                throw Error.argument('format', Sys.Res.stringFormatBraceMismatch);
540            }
541            result += format.slice(i, close + 1);
542            i = close + 2;
543            continue;
544        }
545        result += format.slice(i, open);
546        i = open + 1;
547        if (format.charAt(i) === '{') {
548            result += '{';
549            i++;
550            continue;
551        }
552        if (close < 0) throw Error.argument('format', Sys.Res.stringFormatBraceMismatch);
553        var brace = format.substring(i, close);
554        var colonIndex = brace.indexOf(':');
555        var argNumber = parseInt((colonIndex < 0)? brace : brace.substring(0, colonIndex), 10) + 1;
556        if (isNaN(argNumber)) throw Error.argument('format', Sys.Res.stringFormatInvalid);
557        var argFormat = (colonIndex < 0)? '' : brace.substring(colonIndex + 1);
558        var arg = args[argNumber];
559        if (typeof(arg) === "undefined" || arg === null) {
560            arg = '';
561        }
562        if (arg.toFormattedString) {
563            result += arg.toFormattedString(argFormat);
564        }
565        else if (useLocale && arg.localeFormat) {
566            result += arg.localeFormat(argFormat);
567        }
568        else if (arg.format) {
569            result += arg.format(argFormat);
570        }
571        else
572            result += arg.toString();
573        i = close + 1;
574    }
575    return result;
576}
577 
578Boolean.__typeName = 'Boolean';
579Boolean.__class = true;
580Boolean.parse = function Boolean$parse(value) {
581    /// <summary locid="M:J#Boolean.parse" />
582    /// <param name="value" type="String"></param>
583    /// <returns type="Boolean"></returns>
584    var e = Function._validateParams(arguments, [
585        {name: "value", type: String}
586    ], false);
587    if (e) throw e;
588    var v = value.trim().toLowerCase();
589    if (v === 'false') return false;
590    if (v === 'true') return true;
591    throw Error.argumentOutOfRange('value', value, Sys.Res.boolTrueOrFalse);
592}
593 
594Date.__typeName = 'Date';
595Date.__class = true;
596 
597Number.__typeName = 'Number';
598Number.__class = true;
599 
600RegExp.__typeName = 'RegExp';
601RegExp.__class = true;
602 
603if (!window) this.window = this;
604window.Type = Function;
605Type.__fullyQualifiedIdentifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]([^ \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*[^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\])?$", "i");
606Type.__identifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\][^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*$", "i");
607Type.prototype.callBaseMethod = function Type$callBaseMethod(instance, name, baseArguments) {
608    /// <summary locid="M:J#Type.callBaseMethod" />
609    /// <param name="instance"></param>
610    /// <param name="name" type="String"></param>
611    /// <param name="baseArguments" type="Array" optional="true" mayBeNull="true" elementMayBeNull="true"></param>
612    /// <returns></returns>
613    var e = Function._validateParams(arguments, [
614        {name: "instance"},
615        {name: "name", type: String},
616        {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true}
617    ]);
618    if (e) throw e;
619    var baseMethod = Sys._getBaseMethod(this, instance, name);
620    if (!baseMethod) throw Error.invalidOperation(String.format(Sys.Res.methodNotFound, name));
621    if (!baseArguments) {
622        return baseMethod.apply(instance);
623    }
624    else {
625        return baseMethod.apply(instance, baseArguments);
626    }
627}
628Type.prototype.getBaseMethod = function Type$getBaseMethod(instance, name) {
629    /// <summary locid="M:J#Type.getBaseMethod" />
630    /// <param name="instance"></param>
631    /// <param name="name" type="String"></param>
632    /// <returns type="Function" mayBeNull="true"></returns>
633    var e = Function._validateParams(arguments, [
634        {name: "instance"},
635        {name: "name", type: String}
636    ]);
637    if (e) throw e;
638    return Sys._getBaseMethod(this, instance, name);
639}
640Type.prototype.getBaseType = function Type$getBaseType() {
641    /// <summary locid="M:J#Type.getBaseType" />
642    /// <returns type="Type" mayBeNull="true"></returns>
643    if (arguments.length !== 0) throw Error.parameterCount();
644    return (typeof(this.__baseType) === "undefined") ? null : this.__baseType;
645}
646Type.prototype.getInterfaces = function Type$getInterfaces() {
647    /// <summary locid="M:J#Type.getInterfaces" />
648    /// <returns type="Array" elementType="Type" mayBeNull="false" elementMayBeNull="false"></returns>
649    if (arguments.length !== 0) throw Error.parameterCount();
650    var result = [];
651    var type = this;
652    while(type) {
653        var interfaces = type.__interfaces;
654        if (interfaces) {
655            for (var i = 0, l = interfaces.length; i < l; i++) {
656                var interfaceType = interfaces[i];
657                if (!Array.contains(result, interfaceType)) {
658                    result[result.length] = interfaceType;
659                }
660            }
661        }
662        type = type.__baseType;
663    }
664    return result;
665}
666Type.prototype.getName = function Type$getName() {
667    /// <summary locid="M:J#Type.getName" />
668    /// <returns type="String"></returns>
669    if (arguments.length !== 0) throw Error.parameterCount();
670    return (typeof(this.__typeName) === "undefined") ? "" : this.__typeName;
671}
672Type.prototype.implementsInterface = function Type$implementsInterface(interfaceType) {
673    /// <summary locid="M:J#Type.implementsInterface" />
674    /// <param name="interfaceType" type="Type"></param>
675    /// <returns type="Boolean"></returns>
676    var e = Function._validateParams(arguments, [
677        {name: "interfaceType", type: Type}
678    ]);
679    if (e) throw e;
680    this.resolveInheritance();
681    var interfaceName = interfaceType.getName();
682    var cache = this.__interfaceCache;
683    if (cache) {
684        var cacheEntry = cache[interfaceName];
685        if (typeof(cacheEntry) !== 'undefined') return cacheEntry;
686    }
687    else {
688        cache = this.__interfaceCache = {};
689    }
690    var baseType = this;
691    while (baseType) {
692        var interfaces = baseType.__interfaces;
693        if (interfaces) {
694            if (Array.indexOf(interfaces, interfaceType) !== -1) {
695                return cache[interfaceName] = true;
696            }
697        }
698        baseType = baseType.__baseType;
699    }
700    return cache[interfaceName] = false;
701}
702Type.prototype.inheritsFrom = function Type$inheritsFrom(parentType) {
703    /// <summary locid="M:J#Type.inheritsFrom" />
704    /// <param name="parentType" type="Type"></param>
705    /// <returns type="Boolean"></returns>
706    var e = Function._validateParams(arguments, [
707        {name: "parentType", type: Type}
708    ]);
709    if (e) throw e;
710    this.resolveInheritance();
711    var baseType = this.__baseType;
712    while (baseType) {
713        if (baseType === parentType) {
714            return true;
715        }
716        baseType = baseType.__baseType;
717    }
718    return false;
719}
720Type.prototype.initializeBase = function Type$initializeBase(instance, baseArguments) {
721    /// <summary locid="M:J#Type.initializeBase" />
722    /// <param name="instance"></param>
723    /// <param name="baseArguments" type="Array" optional="true" mayBeNull="true" elementMayBeNull="true"></param>
724    /// <returns></returns>
725    var e = Function._validateParams(arguments, [
726        {name: "instance"},
727        {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true}
728    ]);
729    if (e) throw e;
730    if (!Sys._isInstanceOfType(this, instance)) throw Error.argumentType('instance', Object.getType(instance), this);
731    this.resolveInheritance();
732    if (this.__baseType) {
733        if (!baseArguments) {
734            this.__baseType.apply(instance);
735        }
736        else {
737            this.__baseType.apply(instance, baseArguments);
738        }
739    }
740    return instance;
741}
742Type.prototype.isImplementedBy = function Type$isImplementedBy(instance) {
743    /// <summary locid="M:J#Type.isImplementedBy" />
744    /// <param name="instance" mayBeNull="true"></param>
745    /// <returns type="Boolean"></returns>
746    var e = Function._validateParams(arguments, [
747        {name: "instance", mayBeNull: true}
748    ]);
749    if (e) throw e;
750    if (typeof(instance) === "undefined" || instance === null) return false;
751    var instanceType = Object.getType(instance);
752    return !!(instanceType.implementsInterface && instanceType.implementsInterface(this));
753}
754Type.prototype.isInstanceOfType = function Type$isInstanceOfType(instance) {
755    /// <summary locid="M:J#Type.isInstanceOfType" />
756    /// <param name="instance" mayBeNull="true"></param>
757    /// <returns type="Boolean"></returns>
758    var e = Function._validateParams(arguments, [
759        {name: "instance", mayBeNull: true}
760    ]);
761    if (e) throw e;
762    return Sys._isInstanceOfType(this, instance);
763}
764Type.prototype.registerClass = function Type$registerClass(typeName, baseType, interfaceTypes) {
765    /// <summary locid="M:J#Type.registerClass" />
766    /// <param name="typeName" type="String"></param>
767    /// <param name="baseType" type="Type" optional="true" mayBeNull="true"></param>
768    /// <param name="interfaceTypes" parameterArray="true" type="Type"></param>
769    /// <returns type="Type"></returns>
770    var e = Function._validateParams(arguments, [
771        {name: "typeName", type: String},
772        {name: "baseType", type: Type, mayBeNull: true, optional: true},
773        {name: "interfaceTypes", type: Type, parameterArray: true}
774    ]);
775    if (e) throw e;
776    if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName);
777    var parsedName;
778    try {
779        parsedName = eval(typeName);
780    }
781    catch(e) {
782        throw Error.argument('typeName', Sys.Res.argumentTypeName);
783    }
784    if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName);
785    if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName));
786    if ((arguments.length > 1) && (typeof(baseType) === 'undefined')) throw Error.argumentUndefined('baseType');
787    if (baseType && !baseType.__class) throw Error.argument('baseType', Sys.Res.baseNotAClass);
788    this.prototype.constructor = this;
789    this.__typeName = typeName;
790    this.__class = true;
791    if (baseType) {
792        this.__baseType = baseType;
793        this.__basePrototypePending = true;
794    }
795    Sys.__upperCaseTypes[typeName.toUpperCase()] = this;
796    if (interfaceTypes) {
797        this.__interfaces = [];
798        this.resolveInheritance();
799        for (var i = 2, l = arguments.length; i < l; i++) {
800            var interfaceType = arguments[i];
801            if (!interfaceType.__interface) throw Error.argument('interfaceTypes[' + (i - 2) + ']', Sys.Res.notAnInterface);
802            for (var methodName in interfaceType.prototype) {
803                var method = interfaceType.prototype[methodName];
804                if (!this.prototype[methodName]) {
805                    this.prototype[methodName] = method;
806                }
807            }
808            this.__interfaces.push(interfaceType);
809        }
810    }
811    Sys.__registeredTypes[typeName] = true;
812    return this;
813}
814Type.prototype.registerInterface = function Type$registerInterface(typeName) {
815    /// <summary locid="M:J#Type.registerInterface" />
816    /// <param name="typeName" type="String"></param>
817    /// <returns type="Type"></returns>
818    var e = Function._validateParams(arguments, [
819        {name: "typeName", type: String}
820    ]);
821    if (e) throw e;
822    if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName);
823    var parsedName;
824    try {
825        parsedName = eval(typeName);
826    }
827    catch(e) {
828        throw Error.argument('typeName', Sys.Res.argumentTypeName);
829    }
830    if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName);
831    if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName));
832    Sys.__upperCaseTypes[typeName.toUpperCase()] = this;
833    this.prototype.constructor = this;
834    this.__typeName = typeName;
835    this.__interface = true;
836    Sys.__registeredTypes[typeName] = true;
837    return this;
838}
839Type.prototype.resolveInheritance = function Type$resolveInheritance() {
840    /// <summary locid="M:J#Type.resolveInheritance" />
841    if (arguments.length !== 0) throw Error.parameterCount();
842    if (this.__basePrototypePending) {
843        var baseType = this.__baseType;
844        baseType.resolveInheritance();
845        for (var memberName in baseType.prototype) {
846            var memberValue = baseType.prototype[memberName];
847            if (!this.prototype[memberName]) {
848                this.prototype[memberName] = memberValue;
849            }
850        }
851        delete this.__basePrototypePending;
852    }
853}
854Type.getRootNamespaces = function Type$getRootNamespaces() {
855    /// <summary locid="M:J#Type.getRootNamespaces" />
856    /// <returns type="Array"></returns>
857    if (arguments.length !== 0) throw Error.parameterCount();
858    return Array.clone(Sys.__rootNamespaces);
859}
860Type.isClass = function Type$isClass(type) {
861    /// <summary locid="M:J#Type.isClass" />
862    /// <param name="type" mayBeNull="true"></param>
863    /// <returns type="Boolean"></returns>
864    var e = Function._validateParams(arguments, [
865        {name: "type", mayBeNull: true}
866    ]);
867    if (e) throw e;
868    if ((typeof(type) === 'undefined') || (type === null)) return false;
869    return !!type.__class;
870}
871Type.isInterface = function Type$isInterface(type) {
872    /// <summary locid="M:J#Type.isInterface" />
873    /// <param name="type" mayBeNull="true"></param>
874    /// <returns type="Boolean"></returns>
875    var e = Function._validateParams(arguments, [
876        {name: "type", mayBeNull: true}
877    ]);
878    if (e) throw e;
879    if ((typeof(type) === 'undefined') || (type === null)) return false;
880    return !!type.__interface;
881}
882Type.isNamespace = function Type$isNamespace(object) {
883    /// <summary locid="M:J#Type.isNamespace" />
884    /// <param name="object" mayBeNull="true"></param>
885    /// <returns type="Boolean"></returns>
886    var e = Function._validateParams(arguments, [
887        {name: "object", mayBeNull: true}
888    ]);
889    if (e) throw e;
890    if ((typeof(object) === 'undefined') || (object === null)) return false;
891    return !!object.__namespace;
892}
893Type.parse = function Type$parse(typeName, ns) {
894    /// <summary locid="M:J#Type.parse" />
895    /// <param name="typeName" type="String" mayBeNull="true"></param>
896    /// <param name="ns" optional="true" mayBeNull="true"></param>
897    /// <returns type="Type" mayBeNull="true"></returns>
898    var e = Function._validateParams(arguments, [
899        {name: "typeName", type: String, mayBeNull: true},
900        {name: "ns", mayBeNull: true, optional: true}
901    ]);
902    if (e) throw e;
903    var fn;
904    if (ns) {
905        fn = Sys.__upperCaseTypes[ns.getName().toUpperCase() + '.' + typeName.toUpperCase()];
906        return fn || null;
907    }
908    if (!typeName) return null;
909    if (!Type.__htClasses) {
910        Type.__htClasses = {};
911    }
912    fn = Type.__htClasses[typeName];
913    if (!fn) {
914        fn = eval(typeName);
915        if (typeof(fn) !== 'function') throw Error.argument('typeName', Sys.Res.notATypeName);
916        Type.__htClasses[typeName] = fn;
917    }
918    return fn;
919}
920Type.registerNamespace = function Type$registerNamespace(namespacePath) {
921    /// <summary locid="M:J#Type.registerNamespace" />
922    /// <param name="namespacePath" type="String"></param>
923    var e = Function._validateParams(arguments, [
924        {name: "namespacePath", type: String}
925    ]);
926    if (e) throw e;
927    Type._registerNamespace(namespacePath);
928}
929Type._registerNamespace = function Type$_registerNamespace(namespacePath) {
930    if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);
931    var rootObject = window;
932    var namespaceParts = namespacePath.split('.');
933    for (var i = 0; i < namespaceParts.length; i++) {
934        var currentPart = namespaceParts[i];
935        var ns = rootObject[currentPart];
936        var nsType = typeof(ns);
937        if ((nsType !== "undefined") && (ns !== null)) {
938            if (nsType === "function") {
939                throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsClass, namespaceParts.splice(0, i + 1).join('.')));
940            }
941            if ((typeof(ns) !== "object") || (ns instanceof Array)) {
942                throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsNonObject, namespaceParts.splice(0, i + 1).join('.')));
943            }
944        }
945        if (!ns) {
946            ns = rootObject[currentPart] = {};
947        }
948        if (!ns.__namespace) {
949            if ((i === 0) && (namespacePath !== "Sys")) {
950                Sys.__rootNamespaces[Sys.__rootNamespaces.length] = ns;
951            }
952            ns.__namespace = true;
953            ns.__typeName = namespaceParts.slice(0, i + 1).join('.');
954            var parsedName;
955            try {
956                parsedName = eval(ns.__typeName);
957            }
958            catch(e) {
959                parsedName = null;
960            }
961            if (parsedName !== ns) {
962                delete rootObject[currentPart];
963                throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);
964            }
965            ns.getName = function ns$getName() {return this.__typeName;}
966        }
967        rootObject = ns;
968    }
969}
970Type._checkDependency = function Type$_checkDependency(dependency, featureName) {
971    var scripts = Type._registerScript._scripts, isDependent = (scripts ? (!!scripts[dependency]) : false);
972    if ((typeof(featureName) !== 'undefined') && !isDependent) {
973        throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded, 
974        featureName, dependency));
975    }
976    return isDependent;
977}
978Type._registerScript = function Type$_registerScript(scriptName, dependencies) {
979    var scripts = Type._registerScript._scripts;
980    if (!scripts) {
981        Type._registerScript._scripts = scripts = {};
982    }
983    if (scripts[scriptName]) {
984        throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded, scriptName));
985    }
986    scripts[scriptName] = true;
987    if (dependencies) {
988        for (var i = 0, l = dependencies.length; i < l; i++) {
989            var dependency = dependencies[i];
990            if (!Type._checkDependency(dependency)) {
991                throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound, scriptName, dependency));
992            }
993        }
994    }
995}
996Type._registerNamespace("Sys");
997Sys.__upperCaseTypes = {};
998Sys.__rootNamespaces = [Sys];
999Sys.__registeredTypes = {};
1000Sys._isInstanceOfType = function Sys$_isInstanceOfType(type, instance) {
1001    if (typeof(instance) === "undefined" || instance === null) return false;
1002    if (instance instanceof type) return true;
1003    var instanceType = Object.getType(instance);
1004    return !!(instanceType === type) ||
1005           (instanceType.inheritsFrom && instanceType.inheritsFrom(type)) ||
1006           (instanceType.implementsInterface && instanceType.implementsInterface(type));
1007}
1008Sys._getBaseMethod = function Sys$_getBaseMethod(type, instance, name) {
1009    if (!Sys._isInstanceOfType(type, instance)) throw Error.argumentType('instance', Object.getType(instance), type);
1010    var baseType = type.getBaseType();
1011    if (baseType) {
1012        var baseMethod = baseType.prototype[name];
1013        return (baseMethod instanceof Function) ? baseMethod : null;
1014    }
1015    return null;
1016}
1017Sys._isDomElement = function Sys$_isDomElement(obj) {
1018    var val = false;
1019    if (typeof (obj.nodeType) !== 'number') {
1020        var doc = obj.ownerDocument || obj.document || obj;
1021        if (doc != obj) {
1022            var w = doc.defaultView || doc.parentWindow;
1023            val = (w != obj);
1024        }
1025        else {
1026            val = (typeof (doc.body) === 'undefined');
1027        }
1028    }
1029    return !val;
1030}
1031 
1032Array.__typeName = 'Array';
1033Array.__class = true;
1034Array.add = Array.enqueue = function Array$enqueue(array, item) {
1035    /// <summary locid="M:J#Array.enqueue" />
1036    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1037    /// <param name="item" mayBeNull="true"></param>
1038    var e = Function._validateParams(arguments, [
1039        {name: "array", type: Array, elementMayBeNull: true},
1040        {name: "item", mayBeNull: true}
1041    ]);
1042    if (e) throw e;
1043    array[array.length] = item;
1044}
1045Array.addRange = function Array$addRange(array, items) {
1046    /// <summary locid="M:J#Array.addRange" />
1047    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1048    /// <param name="items" type="Array" elementMayBeNull="true"></param>
1049    var e = Function._validateParams(arguments, [
1050        {name: "array", type: Array, elementMayBeNull: true},
1051        {name: "items", type: Array, elementMayBeNull: true}
1052    ]);
1053    if (e) throw e;
1054    array.push.apply(array, items);
1055}
1056Array.clear = function Array$clear(array) {
1057    /// <summary locid="M:J#Array.clear" />
1058    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1059    var e = Function._validateParams(arguments, [
1060        {name: "array", type: Array, elementMayBeNull: true}
1061    ]);
1062    if (e) throw e;
1063    array.length = 0;
1064}
1065Array.clone = function Array$clone(array) {
1066    /// <summary locid="M:J#Array.clone" />
1067    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1068    /// <returns type="Array" elementMayBeNull="true"></returns>
1069    var e = Function._validateParams(arguments, [
1070        {name: "array", type: Array, elementMayBeNull: true}
1071    ]);
1072    if (e) throw e;
1073    if (array.length === 1) {
1074        return [array[0]];
1075    }
1076    else {
1077        return Array.apply(null, array);
1078    }
1079}
1080Array.contains = function Array$contains(array, item) {
1081    /// <summary locid="M:J#Array.contains" />
1082    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1083    /// <param name="item" mayBeNull="true"></param>
1084    /// <returns type="Boolean"></returns>
1085    var e = Function._validateParams(arguments, [
1086        {name: "array", type: Array, elementMayBeNull: true},
1087        {name: "item", mayBeNull: true}
1088    ]);
1089    if (e) throw e;
1090    return (Sys._indexOf(array, item) >= 0);
1091}
1092Array.dequeue = function Array$dequeue(array) {
1093    /// <summary locid="M:J#Array.dequeue" />
1094    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1095    /// <returns mayBeNull="true"></returns>
1096    var e = Function._validateParams(arguments, [
1097        {name: "array", type: Array, elementMayBeNull: true}
1098    ]);
1099    if (e) throw e;
1100    return array.shift();
1101}
1102Array.forEach = function Array$forEach(array, method, instance) {
1103    /// <summary locid="M:J#Array.forEach" />
1104    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1105    /// <param name="method" type="Function"></param>
1106    /// <param name="instance" optional="true" mayBeNull="true"></param>
1107    var e = Function._validateParams(arguments, [
1108        {name: "array", type: Array, elementMayBeNull: true},
1109        {name: "method", type: Function},
1110        {name: "instance", mayBeNull: true, optional: true}
1111    ]);
1112    if (e) throw e;
1113    for (var i = 0, l = array.length; i < l; i++) {
1114        var elt = array[i];
1115        if (typeof(elt) !== 'undefined') method.call(instance, elt, i, array);
1116    }
1117}
1118Array.indexOf = function Array$indexOf(array, item, start) {
1119    /// <summary locid="M:J#Array.indexOf" />
1120    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1121    /// <param name="item" optional="true" mayBeNull="true"></param>
1122    /// <param name="start" optional="true" mayBeNull="true"></param>
1123    /// <returns type="Number"></returns>
1124    var e = Function._validateParams(arguments, [
1125        {name: "array", type: Array, elementMayBeNull: true},
1126        {name: "item", mayBeNull: true, optional: true},
1127        {name: "start", mayBeNull: true, optional: true}
1128    ]);
1129    if (e) throw e;
1130    return Sys._indexOf(array, item, start);
1131}
1132Array.insert = function Array$insert(array, index, item) {
1133    /// <summary locid="M:J#Array.insert" />
1134    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1135    /// <param name="index" mayBeNull="true"></param>
1136    /// <param name="item" mayBeNull="true"></param>
1137    var e = Function._validateParams(arguments, [
1138        {name: "array", type: Array, elementMayBeNull: true},
1139        {name: "index", mayBeNull: true},
1140        {name: "item", mayBeNull: true}
1141    ]);
1142    if (e) throw e;
1143    array.splice(index, 0, item);
1144}
1145Array.parse = function Array$parse(value) {
1146    /// <summary locid="M:J#Array.parse" />
1147    /// <param name="value" type="String" mayBeNull="true"></param>
1148    /// <returns type="Array" elementMayBeNull="true"></returns>
1149    var e = Function._validateParams(arguments, [
1150        {name: "value", type: String, mayBeNull: true}
1151    ]);
1152    if (e) throw e;
1153    if (!value) return [];
1154    var v = eval(value);
1155    if (!Array.isInstanceOfType(v)) throw Error.argument('value', Sys.Res.arrayParseBadFormat);
1156    return v;
1157}
1158Array.remove = function Array$remove(array, item) {
1159    /// <summary locid="M:J#Array.remove" />
1160    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1161    /// <param name="item" mayBeNull="true"></param>
1162    /// <returns type="Boolean"></returns>
1163    var e = Function._validateParams(arguments, [
1164        {name: "array", type: Array, elementMayBeNull: true},
1165        {name: "item", mayBeNull: true}
1166    ]);
1167    if (e) throw e;
1168    var index = Sys._indexOf(array, item);
1169    if (index >= 0) {
1170        array.splice(index, 1);
1171    }
1172    return (index >= 0);
1173}
1174Array.removeAt = function Array$removeAt(array, index) {
1175    /// <summary locid="M:J#Array.removeAt" />
1176    /// <param name="array" type="Array" elementMayBeNull="true"></param>
1177    /// <param name="index" mayBeNull="true"></param>
1178    var e = Function._validateParams(arguments, [
1179        {name: "array", type: Array, elementMayBeNull: true},
1180        {name: "index", mayBeNull: true}
1181    ]);
1182    if (e) throw e;
1183    array.splice(index, 1);
1184}
1185Sys._indexOf = function Sys$_indexOf(array, item, start) {
1186    if (typeof(item) === "undefined") return -1;
1187    var length = array.length;
1188    if (length !== 0) {
1189        start = start - 0;
1190        if (isNaN(start)) {
1191            start = 0;
1192        }
1193        else {
1194            if (isFinite(start)) {
1195                start = start - (start % 1);
1196            }
1197            if (start < 0) {
1198                start = Math.max(0, length + start);
1199            }
1200        }
1201        for (var i = start; i < length; i++) {
1202            if ((typeof(array[i]) !== "undefined") && (array[i] === item)) {
1203                return i;
1204            }
1205        }
1206    }
1207    return -1;
1208}
1209Type._registerScript._scripts = {
1210	"MicrosoftAjaxCore.js": true,
1211	"MicrosoftAjaxGlobalization.js": true,
1212	"MicrosoftAjaxSerialization.js": true,
1213	"MicrosoftAjaxComponentModel.js": true,
1214	"MicrosoftAjaxHistory.js": true,
1215	"MicrosoftAjaxNetwork.js" : true,
1216	"MicrosoftAjaxWebServices.js": true };
1217 
1218Sys.IDisposable = function Sys$IDisposable() {
1219    throw Error.notImplemented();
1220}
1221    function Sys$IDisposable$dispose() {
1222        throw Error.notImplemented();
1223    }
1224Sys.IDisposable.prototype = {
1225    dispose: Sys$IDisposable$dispose
1226}
1227Sys.IDisposable.registerInterface('Sys.IDisposable');
1228 
1229Sys.StringBuilder = function Sys$StringBuilder(initialText) {
1230    /// <summary locid="M:J#Sys.StringBuilder.#ctor" />
1231    /// <param name="initialText" optional="true" mayBeNull="true"></param>
1232    var e = Function._validateParams(arguments, [
1233        {name: "initialText", mayBeNull: true, optional: true}
1234    ]);
1235    if (e) throw e;
1236    this._parts = (typeof(initialText) !== 'undefined' && initialText !== null && initialText !== '') ?
1237        [initialText.toString()] : [];
1238    this._value = {};
1239    this._len = 0;
1240}
1241    function Sys$StringBuilder$append(text) {
1242        /// <summary locid="M:J#Sys.StringBuilder.append" />
1243        /// <param name="text" mayBeNull="true"></param>
1244        var e = Function._validateParams(arguments, [
1245            {name: "text", mayBeNull: true}
1246        ]);
1247        if (e) throw e;
1248        this._parts[this._parts.length] = text;
1249    }
1250    function Sys$StringBuilder$appendLine(text) {
1251        /// <summary locid="M:J#Sys.StringBuilder.appendLine" />
1252        /// <param name="text" optional="true" mayBeNull="true"></param>
1253        var e = Function._validateParams(arguments, [
1254            {name: "text", mayBeNull: true, optional: true}
1255        ]);
1256        if (e) throw e;
1257        this._parts[this._parts.length] =
1258            ((typeof(text) === 'undefined') || (text === null) || (text === '')) ?
1259            '\r\n' : text + '\r\n';
1260    }
1261    function Sys$StringBuilder$clear() {
1262        /// <summary locid="M:J#Sys.StringBuilder.clear" />
1263        if (arguments.length !== 0) throw Error.parameterCount();
1264        this._parts = [];
1265        this._value = {};
1266        this._len = 0;
1267    }
1268    function Sys$StringBuilder$isEmpty() {
1269        /// <summary locid="M:J#Sys.StringBuilder.isEmpty" />
1270        /// <returns type="Boolean"></returns>
1271        if (arguments.length !== 0) throw Error.parameterCount();
1272        if (this._parts.length === 0) return true;
1273        return this.toString() === '';
1274    }
1275    function Sys$StringBuilder$toString(separator) {
1276        /// <summary locid="M:J#Sys.StringBuilder.toString" />
1277        /// <param name="separator" type="String" optional="true" mayBeNull="true"></param>
1278        /// <returns type="String"></returns>
1279        var e = Function._validateParams(arguments, [
1280            {name: "separator", type: String, mayBeNull: true, optional: true}
1281        ]);
1282        if (e) throw e;
1283        separator = separator || '';
1284        var parts = this._parts;
1285        if (this._len !== parts.length) {
1286            this._value = {};
1287            this._len = parts.length;
1288        }
1289        var val = this._value;
1290        if (typeof(val[separator]) === 'undefined') {
1291            if (separator !== '') {
1292                for (var i = 0; i < parts.length;) {
1293                    if ((typeof(parts[i]) === 'undefined') || (parts[i] === '') || (parts[i] === null)) {
1294                        parts.splice(i, 1);
1295                    }
1296                    else {
1297                        i++;
1298                    }
1299                }
1300            }
1301            val[separator] = this._parts.join(separator);
1302        }
1303        return val[separator];
1304    }
1305Sys.StringBuilder.prototype = {
1306    append: Sys$StringBuilder$append,
1307    appendLine: Sys$StringBuilder$appendLine,
1308    clear: Sys$StringBuilder$clear,
1309    isEmpty: Sys$StringBuilder$isEmpty,
1310    toString: Sys$StringBuilder$toString
1311}
1312Sys.StringBuilder.registerClass('Sys.StringBuilder');
1313 
1314Sys.Browser = {};
1315Sys.Browser.InternetExplorer = {};
1316Sys.Browser.Firefox = {};
1317Sys.Browser.Safari = {};
1318Sys.Browser.Opera = {};
1319Sys.Browser.agent = null;
1320Sys.Browser.hasDebuggerStatement = false;
1321Sys.Browser.name = navigator.appName;
1322Sys.Browser.version = parseFloat(navigator.appVersion);
1323Sys.Browser.documentMode = 0;
1324if (navigator.userAgent.indexOf(' MSIE ') > -1) {
1325    Sys.Browser.agent = Sys.Browser.InternetExplorer;
1326    Sys.Browser.version = parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);
1327    if (Sys.Browser.version >= 8) {
1328        if (document.documentMode >= 7) {
1329            Sys.Browser.documentMode = document.documentMode;    
1330        }
1331    }
1332    Sys.Browser.hasDebuggerStatement = true;
1333}
1334else if (navigator.userAgent.indexOf(' Firefox/') > -1) {
1335    Sys.Browser.agent = Sys.Browser.Firefox;
1336    Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]);
1337    Sys.Browser.name = 'Firefox';
1338    Sys.Browser.hasDebuggerStatement = true;
1339}
1340else if (navigator.userAgent.indexOf(' AppleWebKit/') > -1) {
1341    Sys.Browser.agent = Sys.Browser.Safari;
1342    Sys.Browser.version = parseFloat(navigator.userAgent.match(/ AppleWebKit\/(\d+(\.\d+)?)/)[1]);
1343    Sys.Browser.name = 'Safari';
1344}
1345else if (navigator.userAgent.indexOf('Opera/') > -1) {
1346    Sys.Browser.agent = Sys.Browser.Opera;
1347}
1348 
1349Sys.EventArgs = function Sys$EventArgs() {
1350    /// <summary locid="M:J#Sys.EventArgs.#ctor" />
1351    if (arguments.length !== 0) throw Error.parameterCount();
1352}
1353Sys.EventArgs.registerClass('Sys.EventArgs');
1354Sys.EventArgs.Empty = new Sys.EventArgs();
1355 
1356Sys.CancelEventArgs = function Sys$CancelEventArgs() {
1357    /// <summary locid="M:J#Sys.CancelEventArgs.#ctor" />
1358    if (arguments.length !== 0) throw Error.parameterCount();
1359    Sys.CancelEventArgs.initializeBase(this);
1360    this._cancel = false;
1361}
1362    function Sys$CancelEventArgs$get_cancel() {
1363        /// <value type="Boolean" locid="P:J#Sys.CancelEventArgs.cancel"></value>
1364        if (arguments.length !== 0) throw Error.parameterCount();
1365        return this._cancel;
1366    }
1367    function Sys$CancelEventArgs$set_cancel(value) {
1368        var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]);
1369        if (e) throw e;
1370        this._cancel = value;
1371    }
1372Sys.CancelEventArgs.prototype = {
1373    get_cancel: Sys$CancelEventArgs$get_cancel,
1374    set_cancel: Sys$CancelEventArgs$set_cancel
1375}
1376Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs);
1377Type.registerNamespace('Sys.UI');
1378 
1379Sys._Debug = function Sys$_Debug() {
1380    /// <summary locid="M:J#Sys.Debug.#ctor" />
1381    /// <field name="isDebug" type="Boolean" locid="F:J#Sys.Debug.isDebug"></field>
1382    if (arguments.length !== 0) throw Error.parameterCount();
1383}
1384    function Sys$_Debug$_appendConsole(text) {
1385        if ((typeof(Debug) !== 'undefined') && Debug.writeln) {
1386            Debug.writeln(text);
1387        }
1388        if (window.console && window.console.log) {
1389            window.console.log(text);
1390        }
1391        if (window.opera) {
1392            window.opera.postError(text);
1393        }
1394        if (window.debugService) {
1395            window.debugService.trace(text);
1396        }
1397    }
1398    function Sys$_Debug$_appendTrace(text) {
1399        var traceElement = document.getElementById('TraceConsole');
1400        if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) {
1401            traceElement.value += text + '\n';
1402        }
1403    }
1404    function Sys$_Debug$assert(condition, message, displayCaller) {
1405        /// <summary locid="M:J#Sys.Debug.assert" />
1406        /// <param name="condition" type="Boolean"></param>
1407        /// <param name="message" type="String" optional="true" mayBeNull="true"></param>
1408        /// <param name="displayCaller" type="Boolean" optional="true"></param>
1409        var e = Function._validateParams(arguments, [
1410            {name: "condition", type: Boolean},
1411            {name: "message", type: String, mayBeNull: true, optional: true},
1412            {name: "displayCaller", type: Boolean, optional: true}
1413        ]);
1414        if (e) throw e;
1415        if (!condition) {
1416            message = (displayCaller && this.assert.caller) ?
1417                String.format(Sys.Res.assertFailedCaller, message, this.assert.caller) :
1418                String.format(Sys.Res.assertFailed, message);
1419            if (confirm(String.format(Sys.Res.breakIntoDebugger, message))) {
1420                this.fail(message);
1421            }
1422        }
1423    }
1424    function Sys$_Debug$clearTrace() {
1425        /// <summary locid="M:J#Sys.Debug.clearTrace" />
1426        if (arguments.length !== 0) throw Error.parameterCount();
1427        var traceElement = document.getElementById('TraceConsole');
1428        if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) {
1429            traceElement.value = '';
1430        }
1431    }
1432    function Sys$_Debug$fail(message) {
1433        /// <summary locid="M:J#Sys.Debug.fail" />
1434        /// <param name="message" type="String" mayBeNull="true"></param>
1435        var e = Function._validateParams(arguments, [
1436            {name: "message", type: String, mayBeNull: true}
1437        ]);
1438        if (e) throw e;
1439        this._appendConsole(message);
1440        if (Sys.Browser.hasDebuggerStatement) {
1441            eval('debugger');
1442        }
1443    }
1444    function Sys$_Debug$trace(text) {
1445        /// <summary locid="M:J#Sys.Debug.trace" />
1446        /// <param name="text"></param>
1447        var e = Function._validateParams(arguments, [
1448            {name: "text"}
1449        ]);
1450        if (e) throw e;
1451        this._appendConsole(text);
1452        this._appendTrace(text);
1453    }
1454    function Sys$_Debug$traceDump(object, name) {
1455        /// <summary locid="M:J#Sys.Debug.traceDump" />
1456        /// <param name="object" mayBeNull="true"></param>
1457        /// <param name="name" type="String" mayBeNull="true" optional="true"></param>
1458        var e = Function._validateParams(arguments, [
1459            {name: "object", mayBeNull: true},
1460            {name: "name", type: String, mayBeNull: true, optional: true}
1461        ]);
1462        if (e) throw e;
1463        var text = this._traceDump(object, name, true);
1464    }
1465    function Sys$_Debug$_traceDump(object, name, recursive, indentationPadding, loopArray) {
1466        name = name? name : 'traceDump';
1467        indentationPadding = indentationPadding? indentationPadding : '';
1468        if (object === null) {
1469            this.trace(indentationPadding + name + ': null');
1470            return;
1471        }
1472        switch(typeof(object)) {
1473            case 'undefined':
1474                this.trace(indentationPadding + name + ': Undefined');
1475                break;
1476            case 'number': case 'string': case 'boolean':
1477                this.trace(indentationPadding + name + ': ' + object);
1478                break;
1479            default:
1480                if (Date.isInstanceOfType(object) || RegExp.isInstanceOfType(object)) {
1481                    this.trace(indentationPadding + name + ': ' + object.toString());
1482                    break;
1483                }
1484                if (!loopArray) {
1485                    loopArray = [];
1486                }
1487                else if (Array.contains(loopArray, object)) {
1488                    this.trace(indentationPadding + name + ': ...');
1489                    return;
1490                }
1491                Array.add(loopArray, object);
1492                if ((object == window) || (object === document) ||
1493                    (window.HTMLElement && (object instanceof HTMLElement)) ||
1494                    (typeof(object.nodeName) === 'string')) {
1495                    var tag = object.tagName? object.tagName : 'DomElement';
1496                    if (object.id) {
1497                        tag += ' - ' + object.id;
1498                    }
1499                    this.trace(indentationPadding + name + ' {' +  tag + '}');
1500                }
1501                else {
1502                    var typeName = Object.getTypeN
1502ame(object);
1503                    this.trace(indentationPadding + name + (typeof(typeName) === 'string' ? ' {' + typeName + '}' : ''));
1504                    if ((indentationPadding === '') || recursive) {
1505                        indentationPadding += "    ";
1506                        var i, length, properties, p, v;
1507                        if (Array.isInstanceOfType(object)) {
1508                            length = object.length;
1509                            for (i = 0; i < length; i++) {
1510                                this._traceDump(object[i], '[' + i + ']', recursive, indentationPadding, loopArray);
1511                            }
1512                        }
1513                        else {
1514                            for (p in object) {
1515                                v = object[p];
1516                                if (!Function.isInstanceOfType(v)) {
1517                                    this._traceDump(v, p, recursive, indentationPadding, loopArray);
1518                                }
1519                            }
1520                        }
1521                    }
1522                }
1523                Array.remove(loopArray, object);
1524        }
1525    }
1526Sys._Debug.prototype = {
1527    _appendConsole: Sys$_Debug$_appendConsole,
1528    _appendTrace: Sys$_Debug$_appendTrace,
1529    assert: Sys$_Debug$assert,
1530    clearTrace: Sys$_Debug$clearTrace,
1531    fail: Sys$_Debug$fail,
1532    trace: Sys$_Debug$trace,
1533    traceDump: Sys$_Debug$traceDump,
1534    _traceDump: Sys$_Debug$_traceDump
1535}
1536Sys._Debug.registerClass('Sys._Debug');
1537Sys.Debug = new Sys._Debug();
1538    Sys.Debug.isDebug = true;
1539 
1540function Sys$Enum$parse(value, ignoreCase) {
1541    /// <summary locid="M:J#Sys.Enum.parse" />
1542    /// <param name="value" type="String"></param>
1543    /// <param name="ignoreCase" type="Boolean" optional="true"></param>
1544    /// <returns></returns>
1545    var e = Function._validateParams(arguments, [
1546        {name: "value", type: String},
1547        {name: "ignoreCase", type: Boolean, optional: true}
1548    ]);
1549    if (e) throw e;
1550    var values, parsed, val;
1551    if (ignoreCase) {
1552        values = this.__lowerCaseValues;
1553        if (!values) {
1554            this.__lowerCaseValues = values = {};
1555            var prototype = this.prototype;
1556            for (var name in prototype) {
1557                values[name.toLowerCase()] = prototype[name];
1558            }
1559        }
1560    }
1561    else {
1562        values = this.prototype;
1563    }
1564    if (!this.__flags) {
1565        val = (ignoreCase ? value.toLowerCase() : value);
1566        parsed = values[val.trim()];
1567        if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, this.__typeName));
1568        return parsed;
1569    }
1570    else {
1571        var parts = (ignoreCase ? value.toLowerCase() : value).split(',');
1572        var v = 0;
1573        for (var i = parts.length - 1; i >= 0; i--) {
1574            var part = parts[i].trim();
1575            parsed = values[part];
1576            if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value.split(',')[i].trim(), this.__typeName));
1577            v |= parsed;
1578        }
1579        return v;
1580    }
1581}
1582function Sys$Enum$toString(value) {
1583    /// <summary locid="M:J#Sys.Enum.toString" />
1584    /// <param name="value" optional="true" mayBeNull="true"></param>
1585    /// <returns type="String"></returns>
1586    var e = Function._validateParams(arguments, [
1587        {name: "value", mayBeNull: true, optional: true}
1588    ]);
1589    if (e) throw e;
1590    if ((typeof(value) === 'undefined') || (value === null)) return this.__string;
1591    if ((typeof(value) != 'number') || ((value % 1) !== 0)) throw Error.argumentType('value', Object.getType(value), this);
1592    var values = this.prototype;
1593    var i;
1594    if (!this.__flags || (value === 0)) {
1595        for (i in values) {
1596            if (values[i] === value) {
1597                return i;
1598            }
1599        }
1600    }
1601    else {
1602        var sorted = this.__sortedValues;
1603        if (!sorted) {
1604            sorted = [];
1605            for (i in values) {
1606                sorted[sorted.length] = {key: i, value: values[i]};
1607            }
1608            sorted.sort(function(a, b) {
1609                return a.value - b.value;
1610            });
1611            this.__sortedValues = sorted;
1612        }
1613        var parts = [];
1614        var v = value;
1615        for (i = sorted.length - 1; i >= 0; i--) {
1616            var kvp = sorted[i];
1617            var vali = kvp.value;
1618            if (vali === 0) continue;
1619            if ((vali & value) === vali) {
1620                parts[parts.length] = kvp.key;
1621                v -= vali;
1622                if (v === 0) break;
1623            }
1624        }
1625        if (parts.length && v === 0) return parts.reverse().join(', ');
1626    }
1627    throw Error.argumentOutOfRange('value', value, String.format(Sys.Res.enumInvalidValue, value, this.__typeName));
1628}
1629Type.prototype.registerEnum = function Type$registerEnum(name, flags) {
1630    /// <summary locid="M:J#Sys.UI.LineType.#ctor" />
1631    /// <param name="name" type="String"></param>
1632    /// <param name="flags" type="Boolean" optional="true"></param>
1633    var e = Function._validateParams(arguments, [
1634        {name: "name", type: String},
1635        {name: "flags", type: Boolean, optional: true}
1636    ]);
1637    if (e) throw e;
1638    if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw Error.argument('name', Sys.Res.notATypeName);
1639    var parsedName;
1640    try {
1641        parsedName = eval(name);
1642    }
1643    catch(e) {
1644        throw Error.argument('name', Sys.Res.argumentTypeName);
1645    }
1646    if (parsedName !== this) throw Error.argument('name', Sys.Res.badTypeName);
1647    if (Sys.__registeredTypes[name]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, name));
1648    for (var j in this.prototype) {
1649        var val = this.prototype[j];
1650        if (!Type.__identifierRegExp.test(j)) throw Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, j));
1651        if (typeof(val) !== 'number' || (val % 1) !== 0) throw Error.invalidOperation(Sys.Res.enumValueNotInteger);
1652        if (typeof(this[j]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.enumReservedName, j));
1653    }
1654    Sys.__upperCaseTypes[name.toUpperCase()] = this;
1655    for (var i in this.prototype) {
1656        this[i] = this.prototype[i];
1657    }
1658    this.__typeName = name;
1659    this.parse = Sys$Enum$parse;
1660    this.__string = this.toString();
1661    this.toString = Sys$Enum$toString;
1662    this.__flags = flags;
1663    this.__enum = true;
1664    Sys.__registeredTypes[name] = true;
1665}
1666Type.isEnum = function Type$isEnum(type) {
1667    /// <summary locid="M:J#Type.isEnum" />
1668    /// <param name="type" mayBeNull="true"></param>
1669    /// <returns type="Boolean"></returns>
1670    var e = Function._validateParams(arguments, [
1671        {name: "type", mayBeNull: true}
1672    ]);
1673    if (e) throw e;
1674    if ((typeof(type) === 'undefined') || (type === null)) return false;
1675    return !!type.__enum;
1676}
1677Type.isFlags = function Type$isFlags(type) {
1678    /// <summary locid="M:J#Type.isFlags" />
1679    /// <param name="type" mayBeNull="true"></param>
1680    /// <returns type="Boolean"></returns>
1681    var e = Function._validateParams(arguments, [
1682        {name: "type", mayBeNull: true}
1683    ]);
1684    if (e) throw e;
1685    if ((typeof(type) === 'undefined') || (type === null)) return false;
1686    return !!type.__flags;
1687}
1688Sys.CollectionChange = function Sys$CollectionChange(action, newItems, newStartingIndex, oldItems, oldStartingIndex) {
1689    /// <summary locid="M:J#Sys.CollectionChange.#ctor" />
1690    /// <param name="action" type="Sys.NotifyCollectionChangedAction"></param>
1691    /// <param name="newItems" optional="true" mayBeNull="true"></param>
1692    /// <param name="newStartingIndex" type="Number" integer="true" optional="true" mayBeNull="true"></param>
1693    /// <param name="oldItems" optional="true" mayBeNull="true"></param>
1694    /// <param name="oldStartingIndex" type="Number" integer="true" optional="true" mayBeNull="true"></param>
1695    /// <field name="action" type="Sys.NotifyCollectionChangedAction" locid="F:J#Sys.CollectionChange.action"></field>
1696    /// <field name="newItems" type="Array" mayBeNull="true" elementMayBeNull="true" locid="F:J#Sys.CollectionChange.newItems"></field>
1697    /// <field name="newStartingIndex" type="Number" integer="true" locid="F:J#Sys.CollectionChange.newStartingIndex"></field>
1698    /// <field name="oldItems" type="Array" mayBeNull="true" elementMayBeNull="true" locid="F:J#Sys.CollectionChange.oldItems"></field>
1699    /// <field name="oldStartingIndex" type="Number" integer="true" locid="F:J#Sys.CollectionChange.oldStartingIndex"></field>
1700    var e = Function._validateParams(arguments, [
1701        {name: "action", type: Sys.NotifyCollectionChangedAction},
1702        {name: "newItems", mayBeNull: true, optional: true},
1703        {name: "newStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true},
1704        {name: "oldItems", mayBeNull: true, optional: true},
1705        {name: "oldStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true}
1706    ]);
1707    if (e) throw e;
1708    this.action = action;
1709    if (newItems) {
1710        if (!(newItems instanceof Array)) {
1711            newItems = [newItems];
1712        }
1713    }
1714    this.newItems = newItems || null;
1715    if (typeof newStartingIndex !== "number") {
1716        newStartingIndex = -1;
1717    }
1718    this.newStartingIndex = newStartingIndex;
1719    if (oldItems) {
1720        if (!(oldItems instanceof Array)) {
1721            oldItems = [oldItems];
1722        }
1723    }
1724    this.oldItems = oldItems || null;
1725    if (typeof oldStartingIndex !== "number") {
1726        oldStartingIndex = -1;
1727    }
1728    this.oldStartingIndex = oldStartingIndex;
1729}
1730Sys.CollectionChange.registerClass("Sys.CollectionChange");
1731Sys.NotifyCollectionChangedAction = function Sys$NotifyCollectionChangedAction() {
1732    /// <summary locid="M:J#Sys.NotifyCollectionChangedAction.#ctor" />
1733    /// <field name="add" type="Number" integer="true" static="true" locid="F:J#Sys.NotifyCollectionChangedAction.add"></field>
1734    /// <field name="remove" type="Number" integer="true" static="true" locid="F:J#Sys.NotifyCollectionChangedAction.remove"></field>
1735    /// <field name="reset" type="Number" integer="true" static="true" locid="F:J#Sys.NotifyCollectionChangedAction.reset"></field>
1736    if (arguments.length !== 0) throw Error.parameterCount();
1737    throw Error.notImplemented();
1738}
1739Sys.NotifyCollectionChangedAction.prototype = {
1740    add: 0,
1741    remove: 1,
1742    reset: 2
1743}
1744Sys.NotifyCollectionChangedAction.registerEnum('Sys.NotifyCollectionChangedAction');
1745Sys.NotifyCollectionChangedEventArgs = function Sys$NotifyCollectionChangedEventArgs(changes) {
1746    /// <summary locid="M:J#Sys.NotifyCollectionChangedEventArgs.#ctor" />
1747    /// <param name="changes" type="Array" elementType="Sys.CollectionChange"></param>
1748    var e = Function._validateParams(arguments, [
1749        {name: "changes", type: Array, elementType: Sys.CollectionChange}
1750    ]);
1751    if (e) throw e;
1752    this._changes = changes;
1753    Sys.NotifyCollectionChangedEventArgs.initializeBase(this);
1754}
1755    function Sys$NotifyCollectionChangedEventArgs$get_changes() {
1756        /// <value type="Array" elementType="Sys.CollectionChange" locid="P:J#Sys.NotifyCollectionChangedEventArgs.changes"></value>
1757        if (arguments.length !== 0) throw Error.parameterCount();
1758        return this._changes || [];
1759    }
1760Sys.NotifyCollectionChangedEventArgs.prototype = {
1761    get_changes: Sys$NotifyCollectionChangedEventArgs$get_changes
1762}
1763Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs", Sys.EventArgs);
1764Sys.Observer = function Sys$Observer() {
1765    throw Error.invalidOperation();
1766}
1767Sys.Observer.registerClass("Sys.Observer");
1768Sys.Observer.makeObservable = function Sys$Observer$makeObservable(target) {
1769    /// <summary locid="M:J#Sys.Observer.makeObservable" />
1770    /// <param name="target" mayBeNull="false"></param>
1771    /// <returns></returns>
1772    var e = Function._validateParams(arguments, [
1773        {name: "target"}
1774    ]);
1775    if (e) throw e;
1776    var isArray = target instanceof Array,
1777        o = Sys.Observer;
1778    Sys.Observer._ensureObservable(target);
1779    if (target.setValue === o._observeMethods.setValue) return target;
1780    o._addMethods(target, o._observeMethods);
1781    if (isArray) {
1782        o._addMethods(target, o._arrayMethods);
1783    }
1784    return target;
1785}
1786Sys.Observer._ensureObservable = function Sys$Observer$_ensureObservable(target) {
1787    var type = typeof target;
1788    if ((type === "string") || (type === "number") || (type === "boolean") || (type === "date")) {
1789        throw Error.invalidOperation(String.format(Sys.Res.notObservable, type));
1790    }
1791}
1792Sys.Observer._addMethods = function Sys$Observer$_addMethods(target, methods) {
1793    for (var m in methods) {
1794        if (target[m] && (target[m] !== methods[m])) {
1795            throw Error.invalidOperation(String.format(Sys.Res.observableConflict, m));
1796        }
1797        target[m] = methods[m];
1798    }
1799}
1800Sys.Observer._addEventHandler = function Sys$Observer$_addEventHandler(target, eventName, handler) {
1801    Sys.Observer._getContext(target, true).events._addHandler(eventName, handler);
1802}
1803Sys.Observer.addEventHandler = function Sys$Observer$addEventHandler(target, eventName, handler) {
1804    /// <summary locid="M:J#Sys.Observer.addEventHandler" />
1805    /// <param name="target"></param>
1806    /// <param name="eventName" type="String"></param>
1807    /// <param name="handler" type="Function"></param>
1808    var e = Function._validateParams(arguments, [
1809        {name: "target"},
1810        {name: "eventName", type: String},
1811        {name: "handler", type: Function}
1812    ]);
1813    if (e) throw e;
1814    Sys.Observer._ensureObservable(target);
1815    Sys.Observer._addEventHandler(target, eventName, handler);
1816}
1817Sys.Observer._removeEventHandler = function Sys$Observer$_removeEventHandler(target, eventName, handler) {
1818    Sys.Observer._getContext(target, true).events._removeHandler(eventName, handler);
1819}
1820Sys.Observer.removeEventHandler = function Sys$Observer$removeEventHandler(target, eventName, handler) {
1821    /// <summary locid="M:J#Sys.Observer.removeEventHandler" />
1822    /// <param name="target"></param>
1823    /// <param name="eventName" type="String"></param>
1824    /// <param name="handler" type="Function"></param>
1825    var e = Function._validateParams(arguments, [
1826        {name: "target"},
1827        {name: "eventName", type: String},
1828        {name: "handler", type: Function}
1829    ]);
1830    if (e) throw e;
1831    Sys.Observer._ensureObservable(target);
1832    Sys.Observer._removeEventHandler(target, eventName, handler);
1833}
1834Sys.Observer.raiseEvent = function Sys$Observer$raiseEvent(target, eventName, eventArgs) {
1835    /// <summary locid="M:J#Sys.Observer.raiseEvent" />
1836    /// <param name="target"></param>
1837    /// <param name="eventName" type="String"></param>
1838    /// <param name="eventArgs" type="Sys.EventArgs"></param>
1839    var e = Function._validateParams(arguments, [
1840        {name: "target"},
1841        {name: "eventName", type: String},
1842        {name: "eventArgs", type: Sys.EventArgs}
1843    ]);
1844    if (e) throw e;
1845    Sys.Observer._ensureObservable(target);
1846    var ctx = Sys.Observer._getContext(target);
1847    if (!ctx) return;
1848    var handler = ctx.events.getHandler(eventName);
1849    if (handler) {
1850        handler(target, eventArgs);
1851    }
1852}
1853Sys.Observer.addPropertyChanged = function Sys$Observer$addPropertyChanged(target, handler) {
1854    /// <summary locid="M:J#Sys.Observer.addPropertyChanged" />
1855    /// <param name="target" mayBeNull="false"></param>
1856    /// <param name="handler" type="Function"></param>
1857    var e = Function._validateParams(arguments, [
1858        {name: "target"},
1859        {name: "handler", type: Function}
1860    ]);
1861    if (e) throw e;
1862    Sys.Observer._ensureObservable(target);
1863    Sys.Observer._addEventHandler(target, "propertyChanged", handler);
1864}
1865Sys.Observer.removePropertyChanged = function Sys$Observer$removePropertyChanged(target, handler) {
1866    /// <summary locid="M:J#Sys.Observer.removePropertyChanged" />
1867    /// <param name="target" mayBeNull="false"></param>
1868    /// <param name="handler" type="Function"></param>
1869    var e = Function._validateParams(arguments, [
1870        {name: "target"},
1871        {name: "handler", type: Function}
1872    ]);
1873    if (e) throw e;
1874    Sys.Observer._ensureObservable(target);
1875    Sys.Observer._removeEventHandler(target, "propertyChanged", handler);
1876}
1877Sys.Observer.beginUpdate = function Sys$Observer$beginUpdate(target) {
1878    /// <summary locid="M:J#Sys.Observer.beginUpdate" />
1879    /// <param name="target" mayBeNull="false"></param>
1880    var e = Function._validateParams(arguments, [
1881        {name: "target"}
1882    ]);
1883    if (e) throw e;
1884    Sys.Observer._ensureObservable(target);
1885    Sys.Observer._getContext(target, true).updating = true;
1886}
1887Sys.Observer.endUpdate = function Sys$Observer$endUpdate(target) {
1888    /// <summary locid="M:J#Sys.Observer.endUpdate" />
1889    /// <param name="target" mayBeNull="false"></param>
1890    var e = Function._validateParams(arguments, [
1891        {name: "target"}
1892    ]);
1893    if (e) throw e;
1894    Sys.Observer._ensureObservable(target);
1895    var ctx = Sys.Observer._getContext(target);
1896    if (!ctx || !ctx.updating) return;
1897    ctx.updating = false;
1898    var dirty = ctx.dirty;
1899    ctx.dirty = false;
1900    if (dirty) {
1901        if (target instanceof Array) {
1902            var changes = ctx.changes;
1903            ctx.changes = null;
1904            Sys.Observer.raiseCollectionChanged(target, changes);
1905        }
1906        Sys.Observer.raisePropertyChanged(target, "");
1907    }
1908}
1909Sys.Observer.isUpdating = function Sys$Observer$isUpdating(target) {
1910    /// <summary locid="M:J#Sys.Observer.isUpdating" />
1911    /// <param name="target" mayBeNull="false"></param>
1912    /// <returns type="Boolean"></returns>
1913    var e = Function._validateParams(arguments, [
1914        {name: "target"}
1915    ]);
1916    if (e) throw e;
1917    Sys.Observer._ensureObservable(target);
1918    var ctx = Sys.Observer._getContext(target);
1919    return ctx ? ctx.updating : false;
1920}
1921Sys.Observer._setValue = function Sys$Observer$_setValue(target, propertyName, value) {
1922    var getter, setter, mainTarget = target, path = propertyName.split('.');
1923    for (var i = 0, l = (path.length - 1); i < l ; i++) {
1924        var name = path[i];
1925        getter = target["get_" + name]; 
1926        if (typeof (getter) === "function") {
1927            target = getter.call(target);
1928        }
1929        else {
1930            target = target[name];
1931        }
1932        var type = typeof (target);
1933        if ((target === null) || (type === "undefined")) {
1934            throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath, propertyName));
1935        }
1936    }    
1937    var currentValue, lastPath = path[l];
1938    getter = target["get_" + lastPath];
1939    setter = target["set_" + lastPath];
1940    if (typeof(getter) === 'function') {
1941        currentValue = getter.call(target);
1942    }
1943    else {
1944        currentValue = target[lastPath];
1945    }
1946    if (typeof(setter) === 'function') {
1947        setter.call(target, value);
1948    }
1949    else {
1950        target[lastPath] = value;
1951    }
1952    if (currentValue !== value) {
1953        var ctx = Sys.Observer._getContext(mainTarget);
1954        if (ctx && ctx.updating) {
1955            ctx.dirty = true;
1956            return;
1957        };
1958        Sys.Observer.raisePropertyChanged(mainTarget, path[0]);
1959    }
1960}
1961Sys.Observer.setValue = function Sys$Observer$setValue(target, propertyName, value) {
1962    /// <summary locid="M:J#Sys.Observer.setValue" />
1963    /// <param name="target" mayBeNull="false"></param>
1964    /// <param name="propertyName" type="String"></param>
1965    /// <param name="value" mayBeNull="true"></param>
1966    var e = Function._validateParams(arguments, [
1967        {name: "target"},
1968        {name: "propertyName", type: String},
1969        {name: "value", mayBeNull: true}
1970    ]);
1971    if (e) throw e;
1972    Sys.Observer._ensureObservable(target);
1973    Sys.Observer._setValue(target, propertyName, value);
1974}
1975Sys.Observer.raisePropertyChanged = function Sys$Observer$raisePropertyChanged(target, propertyName) {
1976    /// <summary locid="M:J#Sys.Observer.raisePropertyChanged" />
1977    /// <param name="target" mayBeNull="false"></param>
1978    /// <param name="propertyName" type="String"></param>
1979    Sys.Observer.raiseEvent(target, "propertyChanged", new Sys.PropertyChangedEventArgs(propertyName));
1980}
1981Sys.Observer.addCollectionChanged = function Sys$Observer$addCollectionChanged(target, handler) {
1982    /// <summary locid="M:J#Sys.Observer.addCollectionChanged" />
1983    /// <param name="target" type="Array" elementMayBeNull="true"></param>
1984    /// <param name="handler" type="Function"></param>
1985    var e = Function._validateParams(arguments, [
1986        {name: "target", type: Array, elementMayBeNull: true},
1987        {name: "handler", type: Function}
1988    ]);
1989    if (e) throw e;
1990    Sys.Observer._addEventHandler(target, "collectionChanged", handler);
1991}
1992Sys.Observer.removeCollectionChanged = function Sys$Observer$removeCollectionChanged(target, handler) {
1993    /// <summary locid="M:J#Sys.Observer.removeCollectionChanged" />
1994    /// <param name="target" type="Array" elementMayBeNull="true"></param>
1995    /// <param name="handler" type="Function"></param>
1996    var e = Function._validateParams(arguments, [
1997        {name: "target", type: Array, elementMayBeNull: true},
1998        {name: "handler", type: Function}
1999    ]);
2000    if (e) throw e;
2001    Sys.Observer._removeEventHandler(target, "collectionChanged", handler);
2002}
2003Sys.Observer._collectionChange = function Sys$Observer$_collectionChange(target, change) {
2004    var ctx = Sys.Observer._getContext(target);
2005    if (ctx && ctx.updating) {
2006        ctx.dirty = true;
2007        var changes = ctx.changes;
2008        if (!changes) {
2009            ctx.changes = changes = [change];
2010        }
2011        else {
2012            changes.push(change);
2013        }
2014    }
2015    else {
2016        Sys.Observer.raiseCollectionChanged(target, [change]);
2017        Sys.Observer.raisePropertyChanged(target, 'length');
2018    }
2019}
2020Sys.Observer.add = function Sys$Observer$add(target, item) {
2021    /// <summary locid="M:J#Sys.Observer.add" />
2022    /// <param name="target" type="Array" elementMayBeNull="true"></param>
2023    /// <param name="item" mayBeNull="true"></param>
2024    var e = Function._validateParams(arguments, [
2025        {name: "target", type: Array, elementMayBeNull: true},
2026        {name: "item", mayBeNull: true}
2027    ]);
2028    if (e) throw e;
2029    var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], target.length);
2030    Array.add(target, item);
2031    Sys.Observer._collectionChange(target, change);
2032}
2033Sys.Observer.addRange = function Sys$Observer$addRange(target, items) {
2034    /// <summary locid="M:J#Sys.Observer.addRange" />
2035    /// <param name="target" type="Array" elementMayBeNull="true"></param>
2036    /// <param name="items" type="Array" elementMayBeNull="true"></param>
2037    var e = Function._validateParams(arguments, [
2038        {name: "target", type: Array, elementMayBeNull: true},
2039        {name: "items", type: Array, elementMayBeNull: true}
2040    ]);
2041    if (e) throw e;
2042    var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, items, target.length);
2043    Array.addRange(target, items);
2044    Sys.Observer._collectionChange(target, change);
2045}
2046Sys.Observer.clear = function Sys$Observer$clear(target) {
2047    /// <summary locid="M:J#Sys.Observer.clear" />
2048    /// <param name="target" type="Array" elementMayBeNull="true"></param>
2049    var e = Function._validateParams(arguments, [
2050        {name: "target", type: Array, elementMayBeNull: true}
2051    ]);
2052    if (e) throw e;
2053    var oldItems = Array.clone(target);
2054    Array.clear(target);
2055    Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset, null, -1, oldItems, 0));
2056}
2057Sys.Observer.insert = function Sys$Observer$insert(target, index, item) {
2058    /// <summary locid="M:J#Sys.Observer.insert" />
2059    /// <param name="target" type="Array" elementMayBeNull="true"></param>
2060    /// <param name="index" type="Number" integer="true"></param>
2061    /// <param name="item" mayBeNull="true"></param>
2062    var e = Function._validateParams(arguments, [
2063        {name: "target", type: Array, elementMayBeNull: true},
2064        {name: "index", type: Number, integer: true},
2065        {name: "item", mayBeNull: true}
2066    ]);
2067    if (e) throw e;
2068    Array.insert(target, index, item);
2069    Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], index));
2070}
2071Sys.Observer.remove = function Sys$Observer$remove(target, item) {
2072    /// <summary locid="M:J#Sys.Observer.remove" />
2073    /// <param name="target" type="Array" elementMayBeNull="true"></param>
2074    /// <param name="item" mayBeNull="true"></param>
2075    /// <returns type="Boolean"></returns>
2076    var e = Function._validateParams(arguments, [
2077        {name: "target", type: Array, elementMayBeNull: true},
2078        {name: "item", mayBeNull: true}
2079    ]);
2080    if (e) throw e;
2081    var index = Array.indexOf(target, item);
2082    if (index !== -1) {
2083        Array.remove(target, item);
2084        Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index));
2085        return true;
2086    }
2087    return false;
2088}
2089Sys.Observer.removeAt = function Sys$Observer$removeAt(target, index) {
2090    /// <summary locid="M:J#Sys.Observer.removeAt" />
2091    /// <param name="target" type="Array" elementMayBeNull="true"></param>
2092    /// <param name="index" type="Number" integer="true"></param>
2093    var e = Function._validateParams(arguments, [
2094        {name: "target", type: Array, elementMayBeNull: true},
2095        {name: "index", type: Number, integer: true}
2096    ]);
2097    if (e) throw e;
2098    if ((index > -1) && (index < target.length)) {
2099        var item = target[index];
2100        Array.removeAt(target, index);
2101        Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index));
2102    }
2103}
2104Sys.Observer.raiseCollectionChanged = function Sys$Observer$raiseCollectionChanged(target, changes) {
2105    /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2106    /// <param name="target"></param>
2107    /// <param name="changes" type="Array" elementType="Sys.CollectionChange"></param>
2108    Sys.Observer.raiseEvent(target, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes));
2109}
2110Sys.Observer._observeMethods = {
2111    add_propertyChanged: function(handler) {
2112        Sys.Observer._addEventHandler(this, "propertyChanged", handler);
2113    },
2114    remove_propertyChanged: function(handler) {
2115        Sys.Observer._removeEventHandler(this, "propertyChanged", handler);
2116    },
2117    addEventHandler: function(eventName, handler) {
2118        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2119        /// <param name="eventName" type="String"></param>
2120        /// <param name="handler" type="Function"></param>
2121        var e = Function._validateParams(arguments, [
2122            {name: "eventName", type: String},
2123            {name: "handler", type: Function}
2124        ]);
2125        if (e) throw e;
2126        Sys.Observer._addEventHandler(this, eventName, handler);
2127    },
2128    removeEventHandler: function(eventName, handler) {
2129        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2130        /// <param name="eventName" type="String"></param>
2131        /// <param name="handler" type="Function"></param>
2132        var e = Function._validateParams(arguments, [
2133            {name: "eventName", type: String},
2134            {name: "handler", type: Function}
2135        ]);
2136        if (e) throw e;
2137        Sys.Observer._removeEventHandler(this, eventName, handler);
2138    },
2139    get_isUpdating: function() {
2140        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2141        /// <returns type="Boolean"></returns>
2142        return Sys.Observer.isUpdating(this);
2143    },
2144    beginUpdate: function() {
2145        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2146        Sys.Observer.beginUpdate(this);
2147    },
2148    endUpdate: function() {
2149        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2150        Sys.Observer.endUpdate(this);
2151    },
2152    setValue: function(name, value) {
2153        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2154        /// <param name="name" type="String"></param>
2155        /// <param name="value" mayBeNull="true"></param>
2156        var e = Function._validateParams(arguments, [
2157            {name: "name", type: String},
2158            {name: "value", mayBeNull: true}
2159        ]);
2160        if (e) throw e;
2161        Sys.Observer._setValue(this, name, value);
2162    },
2163    raiseEvent: function(eventName, eventArgs) {
2164        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2165        /// <param name="eventName" type="String"></param>
2166        /// <param name="eventArgs" type="Sys.EventArgs"></param>
2167        Sys.Observer.raiseEvent(this, eventName, eventArgs);
2168    },
2169    raisePropertyChanged: function(name) {
2170        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2171        /// <param name="name" type="String"></param>
2172        Sys.Observer.raiseEvent(this, "propertyChanged", new Sys.PropertyChangedEventArgs(name));
2173    }
2174}
2175Sys.Observer._arrayMethods = {
2176    add_collectionChanged: function(handler) {
2177        Sys.Observer._addEventHandler(this, "collectionChanged", handler);
2178    },
2179    remove_collectionChanged: function(handler) {
2180        Sys.Observer._removeEventHandler(this, "collectionChanged", handler);
2181    },
2182    add: function(item) {
2183        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2184        /// <param name="item" mayBeNull="true"></param>
2185        Sys.Observer.add(this, item);
2186    },
2187    addRange: function(items) {
2188        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2189        /// <param name="items" type="Array" elementMayBeNull="true"></param>
2190        Sys.Observer.addRange(this, items);
2191    },
2192    clear: function() {
2193        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2194        Sys.Observer.clear(this);
2195    },
2196    insert: function(index, item) { 
2197        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2198        /// <param name="index" type="Number" integer="true"></param>
2199        /// <param name="item" mayBeNull="true"></param>
2200        Sys.Observer.insert(this, index, item);
2201    },
2202    remove: function(item) {
2203        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2204        /// <param name="item" mayBeNull="true"></param>
2205        /// <returns type="Boolean"></returns>
2206        return Sys.Observer.remove(this, item);
2207    },
2208    removeAt: function(index) {
2209        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2210        /// <param name="index" type="Number" integer="true"></param>
2211        Sys.Observer.removeAt(this, index);
2212    },
2213    raiseCollectionChanged: function(changes) {
2214        /// <summary locid="M:J#Sys.Observer.raiseCollectionChanged" />
2215        /// <param name="changes" type="Array" elementType="Sys.CollectionChange"></param>
2216        Sys.Observer.raiseEvent(this, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes));
2217    }
2218}
2219Sys.Observer._getContext = function Sys$Observer$_getContext(obj, create) {
2220    var ctx = obj._observerContext;
2221    if (ctx) return ctx();
2222    if (create) {
2223        return (obj._observerContext = Sys.Observer._createContext())();
2224    }
2225    return null;
2226}
2227Sys.Observer._createContext = function Sys$Observer$_createContext() {
2228    var ctx = {
2229        events: new Sys.EventHandlerList()
2230    };
2231    return function() {
2232        return ctx;
2233    }
2234}
2235Date._appendPreOrPostMatch = function Date$_appendPreOrPostMatch(preMatch, strBuilder) {
2236    var quoteCount = 0;
2237    var escaped = false;
2238    for (var i = 0, il = preMatch.length; i < il; i++) {
2239        var c = preMatch.charAt(i);
2240        switch (c) {
2241        case '\'':
2242            if (escaped) strBuilder.append("'");
2243            else quoteCount++;
2244            escaped = false;
2245            break;
2246        case '\\':
2247            if (escaped) strBuilder.append("\\");
2248            escaped = !escaped;
2249            break;
2250        default:
2251            strBuilder.append(c);
2252            escaped = false;
2253            break;
2254        }
2255    }
2256    return quoteCount;
2257}
2258Date._expandFormat = function Date$_expandFormat(dtf, format) {
2259    if (!format) {
2260        format = "F";
2261    }
2262    var len = format.length;
2263    if (len === 1) {
2264        switch (format) {
2265        case "d":
2266            return dtf.ShortDatePattern;
2267        case "D":
2268            return dtf.LongDatePattern;
2269        case "t":
2270            return dtf.ShortTimePattern;
2271        case "T":
2272            return dtf.LongTimePattern;
2273        case "f":
2274            return dtf.LongDatePattern + " " + dtf.ShortTimePattern;
2275        case "F":
2276            return dtf.FullDateTimePattern;
2277        case "M": case "m":
2278            return dtf.MonthDayPattern;
2279        case "s":
2280            return dtf.SortableDateTimePattern;
2281        case "Y": case "y":
2282            return dtf.YearMonthPattern;
2283        default:
2284            throw Error.format(Sys.Res.formatInvalidString);
2285        }
2286    }
2287    else if ((len === 2) && (format.charAt(0) === "%")) {
2288        format = format.charAt(1);
2289    }
2290    return format;
2291}
2292Date._expandYear = function Date$_expandYear(dtf, year) {
2293    var now = new Date(),
2294        era = Date._getEra(now);
2295    if (year < 100) {
2296        var curr = Date._getEraYear(now, dtf, era);
2297        year += curr - (curr % 100);
2298        if (year > dtf.Calendar.TwoDigitYearMax) {
2299            year -= 100;
2300        }
2301    }
2302    return year;
2303}
2304Date._getEra = function Date$_getEra(date, eras) {
2305    if (!eras) return 0;
2306    var start, ticks = date.getTime();
2307    for (var i = 0, l = eras.length; i < l; i += 4) {
2308        start = eras[i+2];
2309        if ((start === null) || (ticks >= start)) {
2310            return i;
2311        }
2312    }
2313    return 0;
2314}
2315Date._getEraYear = function Date$_getEraYear(date, dtf, era, sortable) {
2316    var year = date.getFullYear();
2317    if (!sortable && dtf.eras) {
2318        year -= dtf.eras[era + 3];
2319    }    
2320    return year;
2321}
2322Date._getParseRegExp = function Date$_getParseRegExp(dtf, format) {
2323    if (!dtf._parseRegExp) {
2324        dtf._parseRegExp = {};
2325    }
2326    else if (dtf._parseRegExp[format]) {
2327        return dtf._parseRegExp[format];
2328    }
2329    var expFormat = Date._expandFormat(dtf, format);
2330    expFormat = expFormat.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1");
2331    var regexp = new Sys.StringBuilder("^");
2332    var groups = [];
2333    var index = 0;
2334    var quoteCount = 0;
2335    var tokenRegExp = Date._getTokenRegExp();
2336    var match;
2337    while ((match = tokenRegExp.exec(expFormat)) !== null) {
2338        var preMatch = expFormat.slice(index, match.index);
2339        index = tokenRegExp.lastIndex;
2340        quoteCount += Date._appendPreOrPostMatch(preMatch, regexp);
2341        if ((quoteCount%2) === 1) {
2342            regexp.append(match[0]);
2343            continue;
2344        }
2345        switch (match[0]) {
2346            case 'dddd': case 'ddd':
2347            case 'MMMM': case 'MMM':
2348            case 'gg': case 'g':
2349                regexp.append("(\\D+)");
2350                break;
2351            case 'tt': case 't':
2352                regexp.append("(\\D*)");
2353                break;
2354            case 'yyyy':
2355                regexp.append("(\\d{4})");
2356                break;
2357            case 'fff':
2358                regexp.append("(\\d{3})");
2359                break;
2360            case 'ff':
2361                regexp.append("(\\d{2})");
2362                break;
2363            case 'f':
2364                regexp.append("(\\d)");
2365                break;
2366            case 'dd': case 'd':
2367            case 'MM': case 'M':
2368            case 'yy': case 'y':
2369            case 'HH': case 'H':
2370            case 'hh': case 'h':
2371            case 'mm': case 'm':
2372            case 'ss': case 's':
2373                regexp.append("(\\d\\d?)");
2374                break;
2375            case 'zzz':
2376                regexp.append("([+-]?\\d\\d?:\\d{2})");
2377                break;
2378            case 'zz': case 'z':
2379                regexp.append("([+-]?\\d\\d?)");
2380                break;
2381            case '/':
2382                regexp.append("(\\" + dtf.DateSeparator + ")");
2383                break;
2384        }
2385        Array.add(groups, match[0]);
2386    }
2387    Date._appendPreOrPostMatch(expFormat.slice(index), regexp);
2388    regexp.append("$");
2389    var regexpStr = regexp.toString().replace(/\s+/g, "\\s+");
2390    var parseRegExp = {'regExp': regexpStr, 'groups': groups};
2391    dtf._parseRegExp[format] = parseRegExp;
2392    return parseRegExp;
2393}
2394Date._getTokenRegExp = function Date$_getTokenRegExp() {
2395    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|gg|g/g;
2396}
2397Date.parseLocale = function Date$parseLocale(value, formats) {
2398    /// <summary locid="M:J#Date.parseLocale" />
2399    /// <param name="value" type="String"></param>
2400    /// <param name="formats" parameterArray="true" optional="true" mayBeNull="true"></param>
2401    /// <returns type="Date"></returns>
2402    var e = Function._validateParams(arguments, [
2403        {name: "value", type: String},
2404        {name: "formats", mayBeNull: true, optional: true, parameterArray: true}
2405    ]);
2406    if (e) throw e;
2407    return Date._parse(value, Sys.CultureInfo.CurrentCulture, arguments);
2408}
2409Date.parseInvariant = function Date$parseInvariant(value, formats) {
2410    /// <summary locid="M:J#Date.parseInvariant" />
2411    /// <param name="value" type="String"></param>
2412    /// <param name="formats" parameterArray="true" optional="true" mayBeNull="true"></param>
2413    /// <returns type="Date"></returns>
2414    var e = Function._validateParams(arguments, [
2415        {name: "value", type: String},
2416        {name: "formats", mayBeNull: true, optional: true, parameterArray: true}
2417    ]);
2418    if (e) throw e;
2419    return Date._parse(value, Sys.CultureInfo.InvariantCulture, arguments);
2420}
2421Date._parse = function Date$_parse(value, cultureInfo, args) {
2422    var i, l, date, format, formats, custom = false;
2423    for (i = 1, l = args.length; i < l; i++) {
2424        format = args[i];
2425        if (format) {
2426            custom = true;
2427            date = Date._parseExact(value, format, cultureInfo);
2428            if (date) return date;
2429        }
2430    }
2431    if (! custom) {
2432        formats = cultureInfo._getDateTimeFormats();
2433        for (i = 0, l = formats.length; i < l; i++) {
2434            date = Date._parseExact(value, formats[i], cultureInfo);
2435            if (date) return date;
2436        }
2437    }
2438    return null;
2439}
2440Date._parseExact = function Date$_parseExact(value, format, cultureInfo) {
2441    value = value.trim();
2442    var dtf = cultureInfo.dateTimeFormat,
2443        parseInfo = Date._getParseRegExp(dtf, format),
2444        match = new RegExp(parseInfo.regExp).exec(value);
2445    if (match === null) return null;
2446    
2447    var groups = parseInfo.groups,
2448        era = null, year = null, month = null, date = null, weekDay = null,
2449        hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null,
2450        pmHour = false;
2451    for (var j = 0, jl = groups.length; j < jl; j++) {
2452        var matchGroup = match[j+1];
2453        if (matchGroup) {
2454            switch (groups[j]) {
2455                case 'dd': case 'd':
2456                    date = parseInt(matchGroup, 10);
2457                    if ((date < 1) || (date > 31)) return null;
2458                    break;
2459                case 'MMMM':
2460                    month = cultureInfo._getMonthIndex(matchGroup);
2461                    if ((month < 0) || (month > 11)) return null;
2462                    break;
2463                case 'MMM':
2464                    month = cultureInfo._getAbbrMonthIndex(matchGroup);
2465                    if ((month < 0) || (month > 11)) return null;
2466                    break;
2467                case 'M': case 'MM':
2468                    month = parseInt(matchGroup, 10) - 1;
2469                    if ((month < 0) || (month > 11)) return null;
2470                    break;
2471                case 'y': case 'yy':
2472                    year = Date._expandYear(dtf,parseInt(matchGroup, 10));
2473                    if ((year < 0) || (year > 9999)) return null;
2474                    break;
2475                case 'yyyy':
2476                    year = parseInt(matchGroup, 10);
2477                    if ((year < 0) || (year > 9999)) return null;
2478                    break;
2479                case 'h': case 'hh':
2480                    hour = parseInt(matchGroup, 10);
2481                    if (hour === 12) hour = 0;
2482                    if ((hour < 0) || (hour > 11)) return null;
2483                    break;
2484                case 'H': case 'HH':
2485                    hour = parseInt(matchGroup, 10);
2486                    if ((hour < 0) || (hour > 23)) return null;
2487                    break;
2488                case 'm': case 'mm':
2489                    min = parseInt(matchGroup, 10);
2490                    if ((min < 0) || (min > 59)) return null;
2491                    break;
2492                case 's': case 'ss':
2493                    sec = parseInt(matchGroup, 10);
2494                    if ((sec < 0) || (sec > 59)) return null;
2495                    break;
2496                case 'tt': case 't':
2497                    var upperToken = matchGroup.toUpperCase();
2498                    pmHour = (upperToken === dtf.PMDesignator.toUpperCase());
2499                    if (!pmHour && (upperToken !== dtf.AMDesignator.toUpperCase())) return null;
2500                    break;
2501                case 'f':
2502                    msec = parseInt(matchGroup, 10) * 100;
2503                    if ((msec < 0) || (msec > 999)) return null;
2504                    break;
2505                case 'ff':
2506                    msec = parseInt(matchGroup, 10) * 10;
2507                    if ((msec < 0) || (msec > 999)) return null;
2508                    break;
2509                case 'fff':
2510                    msec = parseInt(matchGroup, 10);
2511                    if ((msec < 0) || (msec > 999)) return null;
2512                    break;
2513                case 'dddd':
2514                    weekDay = cultureInfo._getDayIndex(matchGroup);
2515                    if ((weekDay < 0) || (weekDay > 6)) return null;
2516                    break;
2517                case 'ddd':
2518                    weekDay = cultureInfo._getAbbrDayIndex(matchGroup);
2519                    if ((weekDay < 0) || (weekDay > 6)) return null;
2520                    break;
2521                case 'zzz':
2522                    var offsets = matchGroup.split(/:/);
2523                    if (offsets.length !== 2) return null;
2524                    hourOffset = parseInt(offsets[0], 10);
2525                    if ((hourOffset < -12) || (hourOffset > 13)) return null;
2526                    var minOffset = parseInt(offsets[1], 10);
2527                    if ((minOffset < 0) || (minOffset > 59)) return null;
2528                    tzMinOffset = (hourOffset * 60) + (matchGroup.startsWith('-')? -minOffset : minOffset);
2529                    break;
2530                case 'z': case 'zz':
2531                    hourOffset = parseInt(matchGroup, 10);
2532                    if ((hourOffset < -12) || (hourOffset > 13)) return null;
2533                    tzMinOffset = hourOffset * 60;
2534                    break;
2535                case 'g': case 'gg':
2536                    var eraName = matchGroup;
2537                    if (!eraName || !dtf.eras) return null;
2538                    eraName = eraName.toLowerCase().trim();
2539                    for (var i = 0, l = dtf.eras.length; i < l; i += 4) {
2540                        if (eraName === dtf.eras[i + 1].toLowerCase()) {
2541                            era = i;
2542                            break;
2543                        }
2544                    }
2545                    if (era === null) return null;
2546                    break;
2547            }
2548        }
2549    }
2550    var result = new Date(), defaultYear, convert = dtf.Calendar.convert;
2551    if (convert) {
2552        defaultYear = convert.fromGregorian(result)[0];
2553    }
2554    else {
2555        defaultYear = result.getFullYear();
2556    }
2557    if (year === null) {
2558        year = defaultYear;
2559    }
2560    else if (dtf.eras) {
2561        year += dtf.eras[(era || 0) + 3];
2562    }
2563    if (month === null) {
2564        month = 0;
2565    }
2566    if (date === null) {
2567        date = 1;
2568    }
2569    if (convert) {
2570        result = convert.toGregorian(year, month, date);
2571        if (result === null) return null;
2572    }
2573    else {
2574        result.setFullYear(year, month, date);
2575        if (result.getDate() !== date) return null;
2576        if ((weekDay !== null) && (result.getDay() !== weekDay)) {
2577            return null;
2578        }
2579    }
2580    if (pmHour && (hour < 12)) {
2581        hour += 12;
2582    }
2583    result.setHours(hour, min, sec, msec);
2584    if (tzMinOffset !== null) {
2585        var adjustedMin = result.getMinutes() - (tzMinOffset + result.getTimezoneOffset());
2586        result.setHours(result.getHours() + parseInt(adjustedMin/60, 10), adjustedMin%60);
2587    }
2588    return result;
2589}
2590Date.prototype.format = function Date$format(format) {
2591    /// <summary locid="M:J#Date.format" />
2592    /// <param name="format" type="String"></param>
2593    /// <returns type="String"></returns>
2594    var e = Function._validateParams(arguments, [
2595        {name: "format", type: String}
2596    ]);
2597    if (e) throw e;
2598    return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture);
2599}
2600Date.prototype.localeFormat = function Date$localeFormat(format) {
2601    /// <summary locid="M:J#Date.localeFormat" />
2602    /// <param name="format" type="String"></param>
2603    /// <returns type="String"></returns>
2604    var e = Function._validateParams(arguments, [
2605        {name: "format", type: String}
2606    ]);
2607    if (e) throw e;
2608    return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture);
2609}
2610Date.prototype._toFormattedString = function Date$_toFormattedString(format, cultureInfo) {
2611    var dtf = cultureInfo.dateTimeFormat,
2612        convert = dtf.Calendar.convert;
2613    if (!format || !format.length || (format === 'i')) {
2614        if (cultureInfo && cultureInfo.name.length) {
2615            if (convert) {
2616                return this._toFormattedString(dtf.FullDateTimePattern, cultureInfo);
2617            }
2618            else {
2619                var eraDate = new Date(this.getTime());
2620                var era = Date._getEra(this, dtf.eras);
2621                eraDate.setFullYear(Date._getEraYear(this, dtf, era));
2622                return eraDate.toLocaleString();
2623            }
2624        }
2625        else {
2626            return this.toString();
2627        }
2628    }
2629    var eras = dtf.eras,
2630        sortable = (format === "s");
2631    format = Date._expandFormat(dtf, format);
2632    var ret = new Sys.StringBuilder();
2633    var hour;
2634    function addLeadingZero(num) {
2635        if (num < 10) {
2636            return '0' + num;
2637        }
2638        return num.toString();
2639    }
2640    function addLeadingZeros(num) {
2641        if (num < 10) {
2642            return '00' + num;
2643        }
2644        if (num < 100) {
2645            return '0' + num;
2646        }
2647        return num.toString();
2648    }
2649    function padYear(year) {
2650        if (year < 10) {
2651            return '000' + year;
2652        }
2653        else if (year < 100) {
2654            return '00' + year;
2655        }
2656        else if (year < 1000) {
2657            return '0' + year;
2658        }
2659        return year.toString();
2660    }
2661    
2662    var foundDay, checkedDay, dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g;
2663    function hasDay() {
2664        if (foundDay || checkedDay) {
2665            return foundDay;
2666        }
2667        foundDay = dayPartRegExp.test(format);
2668        checkedDay = true;
2669        return foundDay;
2670    }
2671    
2672    var quoteCount = 0,
2673        tokenRegExp = Date._getTokenRegExp(),
2674        converted;
2675    if (!sortable && convert) {
2676        converted = convert.fromGregorian(this);
2677    }
2678    for (;;) {
2679        var index = tokenRegExp.lastIndex;
2680        var ar = tokenRegExp.exec(format);
2681        var preMatch = format.slice(index, ar ? ar.index : format.length);
2682        quoteCount += Date._appendPreOrPostMatch(preMatch, ret);
2683        if (!ar) break;
2684        if ((quoteCount%2) === 1) {
2685            ret.append(ar[0]);
2686            continue;
2687        }
2688        
2689        function getPart(date, part) {
2690            if (converted) {
2691                return converted[part];
2692            }
2693            switch (part) {
2694                case 0: return date.getFullYear();
2695                case 1: return date.getMonth();
2696                case 2: return date.getDate();
2697            }
2698        }
2699        switch (ar[0]) {
2700        case "dddd":
2701            ret.append(dtf.DayNames[this.getDay()]);
2702            break;
2703        case "ddd":
2704            ret.append(dtf.AbbreviatedDayNames[this.getDay()]);
2705            break;
2706        case "dd":
2707            foundDay = true;
2708            ret.append(addLeadingZero(getPart(this, 2)));
2709            break;
2710        case "d":
2711            foundDay = true;
2712            ret.append(getPart(this, 2));
2713            break;
2714        case "MMMM":
2715            ret.append((dtf.MonthGenitiveNames && hasDay())
2716                ? dtf.MonthGenitiveNames[getPart(this, 1)]
2717                : dtf.MonthNames[getPart(this, 1)]);
2718            break;
2719        case "MMM":
2720            ret.append((dtf.AbbreviatedMonthGenitiveNames && hasDay())
2721                ? dtf.AbbreviatedMonthGenitiveNames[getPart(this, 1)]
2722                : dtf.AbbreviatedMonthNames[getPart(this, 1)]);
2723            break;
2724        case "MM":
2725            ret.append(addLeadingZero(getPart(this, 1) + 1));
2726            break;
2727        case "M":
2728            ret.append(getPart(this, 1) + 1);
2729            break;
2730        case "yyyy":
2731            ret.append(padYear(converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)));
2732            break;
2733        case "yy":
2734            ret.append(addLeadingZero((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100));
2735            break;
2736        case "y":
2737            ret.append((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100);
2738            break;
2739        case "hh":
2740            hour = this.getHours() % 12;
2741            if (hour === 0) hour = 12;
2742            ret.append(addLeadingZero(hour));
2743            break;
2744        case "h":
2745            hour = this.getHours() % 12;
2746            if (hour === 0) hour = 12;
2747            ret.append(hour);
2748            break;
2749        case "HH":
2750            ret.append(addLeadingZero(this.getHours()));
2751            break;
2752        case "H":
2753            ret.append(this.getHours());
2754            break;
2755        case "mm":
2756            ret.append(addLeadingZero(this.getMinutes()));
2757            break;
2758        case "m":
2759            ret.append(this.getMinutes());
2760            break;
2761        case "ss":
2762            ret.append(addLeadingZero(this.getSeconds()));
2763            break;
2764        case "s":
2765            ret.append(this.getSeconds());
2766            break;
2767        case "tt":
2768            ret.append((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator);
2769            break;
2770        case "t":
2771            ret.append(((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator).charAt(0));
2772            break;
2773        case "f":
2774            ret.append(addLeadingZeros(this.getMilliseconds()).charAt(0));
2775            break;
2776        case "ff":
2777            ret.append(addLeadingZeros(this.getMilliseconds()).substr(0, 2));
2778            break;
2779        case "fff":
2780            ret.append(addLeadingZeros(this.getMilliseconds()));
2781            break;
2782        case "z":
2783            hour = this.getTimezoneOffset() / 60;
2784            ret.append(((hour <= 0) ? '+' : '-') + Math.floor(Math.abs(hour)));
2785            break;
2786        case "zz":
2787            hour = this.getTimezoneOffset() / 60;
2788            ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))));
2789            break;
2790        case "zzz":
2791            hour = this.getTimezoneOffset() / 60;
2792            ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))) +
2793                ":" + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60)));
2794            break;
2795        case "g":
2796        case "gg":
2797            if (dtf.eras) {
2798                ret.append(dtf.eras[Date._getEra(this, eras) + 1]);
2799            }
2800            break;
2801        case "/":
2802            ret.append(dtf.DateSeparator);
2803            break;
2804        }
2805    }
2806    return ret.toString();
2807}
2808String.localeFormat = function String$localeFormat(format, args) {
2809    /// <summary locid="M:J#String.localeFormat" />
2810    /// <param name="format" type="String"></param>
2811    /// <param name="args" parameterArray="true" mayBeNull="true"></param>
2812    /// <returns type="String"></returns>
2813    var e = Function._validateParams(arguments, [
2814        {name: "format", type: String},
2815        {name: "args", mayBeNull: true, parameterArray: true}
2816    ]);
2817    if (e) throw e;
2818    return String._toFormattedString(true, arguments);
2819}
2820Number.parseLocale = function Number$parseLocale(value) {
2821    /// <summary locid="M:J#Number.parseLocale" />
2822    /// <param name="value" type="String"></param>
2823    /// <returns type="Number"></returns>
2824    var e = Function._validateParams(arguments, [
2825        {name: "value", type: String}
2826    ], false);
2827    if (e) throw e;
2828    return Number._parse(value, Sys.CultureInfo.CurrentCulture);
2829}
2830Number.parseInvariant = function Number$parseInvariant(value) {
2831    /// <summary locid="M:J#Number.parseInvariant" />
2832    /// <param name="value" type="String"></param>
2833    /// <returns type="Number"></returns>
2834    var e = Function._validateParams(arguments, [
2835        {name: "value", type: String}
2836    ], false);
2837    if (e) throw e;
2838    return Number._parse(value, Sys.CultureInfo.InvariantCulture);
2839}
2840Number._parse = function Number$_parse(value, cultureInfo) {
2841    value = value.trim();
2842    
2843    if (value.match(/^[+-]?infinity$/i)) {
2844        return parseFloat(value);
2845    }
2846    if (value.match(/^0x[a-f0-9]+$/i)) {
2847        return parseInt(value);
2848    }
2849    var numFormat = cultureInfo.numberFormat;
2850    var signInfo = Number._parseNumberNegativePattern(value, numFormat, numFormat.NumberNegativePattern);
2851    var sign = signInfo[0];
2852    var num = signInfo[1];
2853    
2854    if ((sign === '') && (numFormat.NumberNegativePattern !== 1)) {
2855        signInfo = Number._parseNumberNegativePattern(value, numFormat, 1);
2856        sign = signInfo[0];
2857        num = signInfo[1];
2858    }
2859    if (sign === '') sign = '+';
2860    
2861    var exponent;
2862    var intAndFraction;
2863    var exponentPos = num.indexOf('e');
2864    if (exponentPos < 0) exponentPos = num.indexOf('E');
2865    if (exponentPos < 0) {
2866        intAndFraction = num;
2867        exponent = null;
2868    }
2869    else {
2870        intAndFraction = num.substr(0, exponentPos);
2871        exponent = num.substr(exponentPos + 1);
2872    }
2873    
2874    var integer;
2875    var fraction;
2876    var decimalPos = intAndFraction.indexOf(numFormat.NumberDecimalSeparator);
2877    if (decimalPos < 0) {
2878        integer = intAndFraction;
2879        fraction = null;
2880    }
2881    else {
2882        integer = intAndFraction.substr(0, decimalPos);
2883        fraction = intAndFraction.substr(decimalPos + numFormat.NumberDecimalSeparator.length);
2884    }
2885    
2886    integer = integer.split(numFormat.NumberGroupSeparator).join('');
2887    var altNumGroupSeparator = numFormat.NumberGroupSeparator.replace(/\u00A0/g, " ");
2888    if (numFormat.NumberGroupSeparator !== altNumGroupSeparator) {
2889        integer = integer.split(altNumGroupSeparator).join('');
2890    }
2891    
2892    var p = sign + integer;
2893    if (fraction !== null) {
2894        p += '.' + fraction;
2895    }
2896    if (exponent !== null) {
2897        var expSignInfo = Number._parseNumberNegativePattern(exponent, numFormat, 1);
2898        if (expSignInfo[0] === '') {
2899            expSignInfo[0] = '+';
2900        }
2901        p += 'e' + expSignInfo[0] + expSignInfo[1];
2902    }
2903    if (p.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/)) {
2904        return parseFloat(p);
2905    }
2906    return Number.NaN;
2907}
2908Number._parseNumberNegativePattern = function Number$_parseNumberNegativePattern(value, numFormat, numberNegativePattern) {
2909    var neg = numFormat.NegativeSign;
2910    var pos = numFormat.PositiveSign;    
2911    switch (numberNegativePattern) {
2912        case 4: 
2913            neg = ' ' + neg;
2914            pos = ' ' + pos;
2915        case 3: 
2916            if (value.endsWith(neg)) {
2917                return ['-', value.substr(0, value.length - neg.length)];
2918            }
2919            else if (value.endsWith(pos)) {
2920                return ['+', value.substr(0, value.length - pos.length)];
2921            }
2922            break;
2923        case 2: 
2924            neg += ' ';
2925            pos += ' ';
2926        case 1: 
2927            if (value.startsWith(neg)) {
2928                return ['-', value.substr(neg.length)];
2929            }
2930            else if (value.startsWith(pos)) {
2931                return ['+', value.substr(pos.length)];
2932            }
2933            break;
2934        case 0: 
2935            if (value.startsWith('(') && value.endsWith(')')) {
2936                return ['-', value.substr(1, value.length - 2)];
2937            }
2938            break;
2939    }
2940    return ['', value];
2941}
2942Number.prototype.format = function Number$format(format) {
2943    /// <summary locid="M:J#Number.format" />
2944    /// <param name="format" type="String"></param>
2945    /// <returns type="String"></returns>
2946    var e = Function._validateParams(arguments, [
2947        {name: "format", type: String}
2948    ]);
2949    if (e) throw e;
2950    return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture);
2951}
2952Number.prototype.localeFormat = function Number$localeFormat(format) {
2953    /// <summary locid="M:J#Number.localeFormat" />
2954    /// <param name="format" type="String"></param>
2955    /// <returns type="String"></returns>
2956    var e = Function._validateParams(arguments, [
2957        {name: "format", type: String}
2958    ]);
2959    if (e) throw e;
2960    return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture);
2961}
2962Number.prototype._toFormattedString = function Number$_toFormattedString(format, cultureInfo) {
2963    if (!format || (format.length === 0) || (format === 'i')) {
2964        if (cultureInfo && (cultureInfo.name.length > 0)) {
2965            return this.toLocaleString();
2966        }
2967        else {
2968            return this.toString();
2969        }
2970    }
2971    
2972    var _percentPositivePattern = ["n %", "n%", "%n" ];
2973    var _percentNegativePattern = ["-n %", "-n%", "-%n"];
2974    var _numberNegativePattern = ["(n)","-n","- n","n-","n -"];
2975    var _currencyPositivePattern = ["$n","n$","$ n","n $"];
2976    var _currencyNegativePattern = ["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];
2977    function zeroPad(str, count, left) {
2978        for (var l=str.length; l < count; l++) {
2979            str = (left ? ('0' + str) : (str + '0'));
2980        }
2981        return str;
2982    }
2983    
2984    function expandNumber(number, precision, groupSizes, sep, decimalChar) {
2985        
2986        var curSize = groupSizes[0];
2987        var curGroupIndex = 1;
2988        var factor = Math.pow(10, precision);
2989        var rounded = (Math.round(number * factor) / factor);
2990        if (!isFinite(rounded)) {
2991            rounded = number;
2992        }
2993        number = rounded;
2994        
2995        var numberString = number.toString();
2996        var right = "";
2997        var exponent;
2998        
2999        
3000        var split = numberString.split(/e/i);
3001        numberString = split[0];
3002        exponent = (split.length > 1 ? parseInt(split[1]) : 0);
3003        split = numberString.split('.');
3004        numberString = split[0];
3005        right = split.length > 1 ? split[1] : "";
3006        
3007        var l;
3008        if (exponent > 0) {
3009            right = zeroPad(right, exponent, false);
3010            numberString += right.slice(0, exponent);
3011            right = right.substr(exponent);
3012        }
3013        else if (exponent < 0) {
3014            exponent = -exponent;
3015            numberString = zeroPad(numberString, exponent+1, true);
3016            right = numberString.slice(-exponent, numberString.length) + right;
3017            numberString = numberString.slice(0, -exponent);
3018        }
3019        if (precision > 0) {
3020            if (right.length > precision) {
3021                right = right.slice(0, precision);
3022            }
3023            else {
3024                right = zeroPad(right, precision, false);
3025            }
3026            right = decimalChar + right;
3027        }
3028        else { 
3029            right = "";
3030        }
3031        var stringIndex = numberString.length-1;
3032        var ret = "";
3033        while (stringIndex >= 0) {
3034            if (curSize === 0 || curSize > stringIndex) {
3035                if (ret.length > 0)
3036                    return numberString.slice(0, stringIndex + 1) + sep + ret + right;
3037                else
3038                    return numberString.slice(0, stringIndex + 1) + right;
3039            }
3040            if (ret.length > 0)
3041                ret = numberString.slice(stringIndex - curSize + 1, str
3041ingIndex+1) + sep + ret;
3042            else
3043                ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1);
3044            stringIndex -= curSize;
3045            if (curGroupIndex < groupSizes.length) {
3046                curSize = groupSizes[curGroupIndex];
3047                curGroupIndex++;
3048            }
3049        }
3050        return numberString.slice(0, stringIndex + 1) + sep + ret + right;
3051    }
3052    var nf = cultureInfo.numberFormat;
3053    var number = Math.abs(this);
3054    if (!format)
3055        format = "D";
3056    var precision = -1;
3057    if (format.length > 1) precision = parseInt(format.slice(1), 10);
3058    var pattern;
3059    switch (format.charAt(0)) {
3060    case "d":
3061    case "D":
3062        pattern = 'n';
3063        if (precision !== -1) {
3064            number = zeroPad(""+number, precision, true);
3065        }
3066        if (this < 0) number = -number;
3067        break;
3068    case "c":
3069    case "C":
3070        if (this < 0) pattern = _currencyNegativePattern[nf.CurrencyNegativePattern];
3071        else pattern = _currencyPositivePattern[nf.CurrencyPositivePattern];
3072        if (precision === -1) precision = nf.CurrencyDecimalDigits;
3073        number = expandNumber(Math.abs(this), precision, nf.CurrencyGroupSizes, nf.CurrencyGroupSeparator, nf.CurrencyDecimalSeparator);
3074        break;
3075    case "n":
3076    case "N":
3077        if (this < 0) pattern = _numberNegativePattern[nf.NumberNegativePattern];
3078        else pattern = 'n';
3079        if (precision === -1) precision = nf.NumberDecimalDigits;
3080        number = expandNumber(Math.abs(this), precision, nf.NumberGroupSizes, nf.NumberGroupSeparator, nf.NumberDecimalSeparator);
3081        break;
3082    case "p":
3083    case "P":
3084        if (this < 0) pattern = _percentNegativePattern[nf.PercentNegativePattern];
3085        else pattern = _percentPositivePattern[nf.PercentPositivePattern];
3086        if (precision === -1) precision = nf.PercentDecimalDigits;
3087        number = expandNumber(Math.abs(this) * 100, precision, nf.PercentGroupSizes, nf.PercentGroupSeparator, nf.PercentDecimalSeparator);
3088        break;
3089    default:
3090        throw Error.format(Sys.Res.formatBadFormatSpecifier);
3091    }
3092    var regex = /n|\$|-|%/g;
3093    var ret = "";
3094    for (;;) {
3095        var index = regex.lastIndex;
3096        var ar = regex.exec(pattern);
3097        ret += pattern.slice(index, ar ? ar.index : pattern.length);
3098        if (!ar)
3099            break;
3100        switch (ar[0]) {
3101        case "n":
3102            ret += number;
3103            break;
3104        case "$":
3105            ret += nf.CurrencySymbol;
3106            break;
3107        case "-":
3108            if (/[1-9]/.test(number)) {
3109                ret += nf.NegativeSign;
3110            }
3111            break;
3112        case "%":
3113            ret += nf.PercentSymbol;
3114            break;
3115        }
3116    }
3117    return ret;
3118}
3119 
3120Sys.CultureInfo = function Sys$CultureInfo(name, numberFormat, dateTimeFormat) {
3121    /// <summary locid="M:J#Sys.CultureInfo.#ctor" />
3122    /// <param name="name" type="String"></param>
3123    /// <param name="numberFormat" type="Object"></param>
3124    /// <param name="dateTimeFormat" type="Object"></param>
3125    var e = Function._validateParams(arguments, [
3126        {name: "name", type: String},
3127        {name: "numberFormat", type: Object},
3128        {name: "dateTimeFormat", type: Object}
3129    ]);
3130    if (e) throw e;
3131    this.name = name;
3132    this.numberFormat = numberFormat;
3133    this.dateTimeFormat = dateTimeFormat;
3134}
3135    function Sys$CultureInfo$_getDateTimeFormats() {
3136        if (! this._dateTimeFormats) {
3137            var dtf = this.dateTimeFormat;
3138            this._dateTimeFormats =
3139              [ dtf.MonthDayPattern,
3140                dtf.YearMonthPattern,
3141                dtf.ShortDatePattern,
3142                dtf.ShortTimePattern,
3143                dtf.LongDatePattern,
3144                dtf.LongTimePattern,
3145                dtf.FullDateTimePattern,
3146                dtf.RFC1123Pattern,
3147                dtf.SortableDateTimePattern,
3148                dtf.UniversalSortableDateTimePattern ];
3149        }
3150        return this._dateTimeFormats;
3151    }
3152    function Sys$CultureInfo$_getIndex(value, a1, a2) {
3153        var upper = this._toUpper(value),
3154            i = Array.indexOf(a1, upper);
3155        if (i === -1) {
3156            i = Array.indexOf(a2, upper);
3157        }
3158        return i;
3159    }
3160    function Sys$CultureInfo$_getMonthIndex(value) {
3161        if (!this._upperMonths) {
3162            this._upperMonths = this._toUpperArray(this.dateTimeFormat.MonthNames);
3163            this._upperMonthsGenitive = this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames);
3164        }
3165        return this._getIndex(value, this._upperMonths, this._upperMonthsGenitive);
3166    }
3167    function Sys$CultureInfo$_getAbbrMonthIndex(value) {
3168        if (!this._upperAbbrMonths) {
3169            this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);
3170            this._upperAbbrMonthsGenitive = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames);
3171        }
3172        return this._getIndex(value, this._upperAbbrMonths, this._upperAbbrMonthsGenitive);
3173    }
3174    function Sys$CultureInfo$_getDayIndex(value) {
3175        if (!this._upperDays) {
3176            this._upperDays = this._toUpperArray(this.dateTimeFormat.DayNames);
3177        }
3178        return Array.indexOf(this._upperDays, this._toUpper(value));
3179    }
3180    function Sys$CultureInfo$_getAbbrDayIndex(value) {
3181        if (!this._upperAbbrDays) {
3182            this._upperAbbrDays = this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);
3183        }
3184        return Array.indexOf(this._upperAbbrDays, this._toUpper(value));
3185    }
3186    function Sys$CultureInfo$_toUpperArray(arr) {
3187        var result = [];
3188        for (var i = 0, il = arr.length; i < il; i++) {
3189            result[i] = this._toUpper(arr[i]);
3190        }
3191        return result;
3192    }
3193    function Sys$CultureInfo$_toUpper(value) {
3194        return value.split("\u00A0").join(' ').toUpperCase();
3195    }
3196Sys.CultureInfo.prototype = {
3197    _getDateTimeFormats: Sys$CultureInfo$_getDateTimeFormats,
3198    _getIndex: Sys$CultureInfo$_getIndex,
3199    _getMonthIndex: Sys$CultureInfo$_getMonthIndex,
3200    _getAbbrMonthIndex: Sys$CultureInfo$_getAbbrMonthIndex,
3201    _getDayIndex: Sys$CultureInfo$_getDayIndex,
3202    _getAbbrDayIndex: Sys$CultureInfo$_getAbbrDayIndex,
3203    _toUpperArray: Sys$CultureInfo$_toUpperArray,
3204    _toUpper: Sys$CultureInfo$_toUpper
3205}
3206Sys.CultureInfo.registerClass('Sys.CultureInfo');
3207Sys.CultureInfo._parse = function Sys$CultureInfo$_parse(value) {
3208    var dtf = value.dateTimeFormat;
3209    if (dtf && !dtf.eras) {
3210        dtf.eras = value.eras;
3211    }
3212    return new Sys.CultureInfo(value.name, value.numberFormat, dtf);
3213}
3214Sys.CultureInfo.InvariantCulture = Sys.CultureInfo._parse({"name":"","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"\u00A4","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"MM/d
3214d/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"yyyy MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]});
3215if (typeof(__cultureInfo) === "object") {
3216    Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(__cultureInfo);
3217    delete __cultureInfo;    
3218}
3219else {
3220    Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse({"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm tt","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"MMMM, yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":false,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]});
3221}
3222Type.registerNamespace('Sys.Serialization');
3223Sys.Serialization.JavaScriptSerializer = function Sys$Serialization$JavaScriptSerializer() {
3224    /// <summary locid="M:J#Sys.Serialization.JavaScriptSerializer.#ctor" />
3225    if (arguments.length !== 0) throw Error.parameterCount();
3226}
3227Sys.Serialization.JavaScriptSerializer.registerClass('Sys.Serialization.JavaScriptSerializer');
3228Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs = [];
3229Sys.Serialization.JavaScriptSerializer._charsToEscape = [];
3230Sys.Serialization.JavaScriptSerializer._dateRegEx = new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"', 'g');
3231Sys.Serialization.JavaScriptSerializer._escapeChars = {};
3232Sys.Serialization.JavaScriptSerializer._escapeRegEx = new RegExp('["\\\\\\x00-\\x1F]', 'i');
3233Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal = new RegExp('["\\\\\\x00-\\x1F]', 'g');
3234Sys.Serialization.JavaScriptSerializer._jsonRegEx = new RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g');
3235Sys.Serialization.JavaScriptSerializer._jsonStringRegEx = new RegExp('"(\\\\.|[^"\\\\])*"', 'g');
3236Sys.Serialization.JavaScriptSerializer._serverTypeFieldName = '__type';
3237Sys.Serialization.JavaScriptSerializer._init = function Sys$Serialization$JavaScriptSerializer$_init() {
3238    var replaceChars = ['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007',
3239                        '\\b','\\t','\\n','\\u000b','\\f','\\r','\\u000e','\\u000f','\\u0010','\\u0011',
3240                        '\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019',
3241                        '\\u001a','\\u001b','\\u001c','\\u001d','\\u001e','\\u001f'];
3242    Sys.Serialization.JavaScriptSerializer._charsToEscape[0] = '\\';
3243    Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\\'] = new RegExp('\\\\', 'g');
3244    Sys.Serialization.JavaScriptSerializer._escapeChars['\\'] = '\\\\';
3245    Sys.Serialization.JavaScriptSerializer._charsToEscape[1] = '"';
3246    Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"'] = new RegExp('"', 'g');
3247    Sys.Serialization.JavaScriptSerializer._escapeChars['"'] = '\\"';
3248    for (var i = 0; i < 32; i++) {
3249        var c = String.fromCharCode(i);
3250        Sys.Serialization.JavaScriptSerializer._charsToEscape[i+2] = c;
3251        Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c] = new RegExp(c, 'g');
3252        Sys.Serialization.JavaScriptSerializer._escapeChars[c] = replaceChars[i];
3253    }
3254}
3255Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeBooleanWithBuilder(object, stringBuilder) {
3256    stringBuilder.append(object.toString());
3257}
3258Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeNumberWithBuilder(object, stringBuilder) {
3259    if (isFinite(object)) {
3260        stringBuilder.append(String(object));
3261    }
3262    else {
3263        throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers);
3264    }
3265}
3266Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeStringWithBuilder(string, stringBuilder) {
3267    stringBuilder.append('"');
3268    if (Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(string)) {
3269        if (Sys.Serialization.JavaScriptSerializer._charsToEscape.length === 0) {
3270            Sys.Serialization.JavaScriptSerializer._init();
3271        }
3272        if (string.length < 128) {
3273            string = string.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,
3274                function(x) { return Sys.Serialization.JavaScriptSerializer._escapeChars[x]; });
3275        }
3276        else {
3277            for (var i = 0; i < 34; i++) {
3278                var c = Sys.Serialization.JavaScriptSerializer._charsToEscape[i];
3279                if (string.indexOf(c) !== -1) {
3280                    if (Sys.Browser.agent === Sys.Browser.Opera || Sys.Browser.agent === Sys.Browser.FireFox) {
3281                        string = string.split(c).join(Sys.Serialization.JavaScriptSerializer._escapeChars[c]);
3282                    }
3283                    else {
3284                        string = string.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c],
3285                            Sys.Serialization.JavaScriptSerializer._escapeChars[c]);
3286                    }
3287                }
3288            }
3289       }
3290    }
3291    stringBuilder.append(string);
3292    stringBuilder.append('"');
3293}
3294Sys.Serialization.JavaScriptSerializer._serializeWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeWithBuilder(object, stringBuilder, sort, prevObjects) {
3295    var i;
3296    switch (typeof object) {
3297    case 'object':
3298        if (object) {
3299            if (prevObjects){
3300                for( var j = 0; j < prevObjects.length; j++) {
3301                    if (prevObjects[j] === object) {
3302                        throw Error.invalidOperation(Sys.Res.cannotSerializeObjectWithCycle);
3303                    }
3304                }
3305            }
3306            else {
3307                prevObjects = new Array();
3308            }
3309            try {
3310                Array.add(prevObjects, object);
3311                
3312                if (Number.isInstanceOfType(object)){
3313                    Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object, stringBuilder);
3314                }
3315                else if (Boolean.isInstanceOfType(object)){
3316                    Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(object, stringBuilder);
3317                }
3318                else if (String.isInstanceOfType(object)){
3319                    Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object, stringBuilder);
3320                }
3321            
3322                else if (Array.isInstanceOfType(object)) {
3323                    stringBuilder.append('[');
3324                   
3325                    for (i = 0; i < object.length; ++i) {
3326                        if (i > 0) {
3327                            stringBuilder.append(',');
3328                        }
3329                        Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object[i], stringBuilder,false,prevObjects);
3330                    }
3331                    stringBuilder.append(']');
3332                }
3333                else {
3334                    if (Date.isInstanceOfType(object)) {
3335                        stringBuilder.append('"\\/Date(');
3336                        stringBuilder.append(object.getTime());
3337                        stringBuilder.append(')\\/"');
3338                        break;
3339                    }
3340                    var properties = [];
3341                    var propertyCount = 0;
3342                    for (var name in object) {
3343                        if (name.startsWith('$')) {
3344                            continue;
3345                        }
3346                        if (name === Sys.Serialization.JavaScriptSerializer._serverTypeFieldName && propertyCount !== 0){
3347                            properties[propertyCount++] = properties[0];
3348                            properties[0] = name;
3349                        }
3350                        else{
3351                            properties[propertyCount++] = name;
3352                        }
3353                    }
3354                    if (sort) properties.sort();
3355                    stringBuilder.append('{');
3356                    var needComma = false;
3357                     
3358                    for (i=0; i<propertyCount; i++) {
3359                        var value = object[properties[i]];
3360                        if (typeof value !== 'undefined' && typeof value !== 'function') {
3361                            if (needComma) {
3362                                stringBuilder.append(',');
3363                            }
3364                            else {
3365                                needComma = true;
3366                            }
3367                           
3368                            Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(properties[i], stringBuilder, sort, prevObjects);
3369                            stringBuilder.append(':');
3370                            Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(value, stringBuilder, sort, prevObjects);
3371                          
3372                        }
3373                    }
3374                stringBuilder.append('}');
3375                }
3376            }
3377            finally {
3378                Array.removeAt(prevObjects, prevObjects.length - 1);
3379            }
3380        }
3381        else {
3382            stringBuilder.append('null');
3383        }
3384        break;
3385    case 'number':
3386        Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object, stringBuilder);
3387        break;
3388    case 'string':
3389        Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object, stringBuilder);
3390        break;
3391    case 'boolean':
3392        Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(object, stringBuilder);
3393        break;
3394    default:
3395        stringBuilder.append('null');
3396        break;
3397    }
3398}
3399Sys.Serialization.JavaScriptSerializer.serialize = function Sys$Serialization$JavaScriptSerializer$serialize(object) {
3400    /// <summary locid="M:J#Sys.Serialization.JavaScriptSerializer.serialize" />
3401    /// <param name="object" mayBeNull="true"></param>
3402    /// <returns type="String"></returns>
3403    var e = Function._validateParams(arguments, [
3404        {name: "object", mayBeNull: true}
3405    ]);
3406    if (e) throw e;
3407    var stringBuilder = new Sys.StringBuilder();
3408    Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object, stringBuilder, false);
3409    return stringBuilder.toString();
3410}
3411Sys.Serialization.JavaScriptSerializer.deserialize = function Sys$Serialization$JavaScriptSerializer$deserialize(data, secure) {
3412    /// <summary locid="M:J#Sys.Serialization.JavaScriptSerializer.deserialize" />
3413    /// <param name="data" type="String"></param>
3414    /// <param name="secure" type="Boolean" optional="true"></param>
3415    /// <returns></returns>
3416    var e = Function._validateParams(arguments, [
3417        {name: "data", type: String},
3418        {name: "secure", type: Boolean, optional: true}
3419    ]);
3420    if (e) throw e;
3421    
3422    if (data.length === 0) throw Error.argument('data', Sys.Res.cannotDeserializeEmptyString);
3423    try {    
3424        var exp = data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx, "$1new Date($2)");
3425        
3426        if (secure && Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(
3427             exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx, ''))) throw null;
3428        return eval('(' + exp + ')');
3429    }
3430    catch (e) {
3431         throw Error.argument('data', Sys.Res.cannotDeserializeInvalidJson);
3432    }
3433}
3434Type.registerNamespace('Sys.UI');
3435 
3436Sys.EventHandlerList = function Sys$EventHandlerList() {
3437    /// <summary locid="M:J#Sys.EventHandlerList.#ctor" />
3438    if (arguments.length !== 0) throw Error.parameterCount();
3439    this._list = {};
3440}
3441    function Sys$EventHandlerList$_addHandler(id, handler) {
3442        Array.add(this._getEvent(id, true), handler);
3443    }
3444    function Sys$EventHandlerList$addHandler(id, handler) {
3445        /// <summary locid="M:J#Sys.EventHandlerList.addHandler" />
3446        /// <param name="id" type="String"></param>
3447        /// <param name="handler" type="Function"></param>
3448        var e = Function._validateParams(arguments, [
3449            {name: "id", type: String},
3450            {name: "handler", type: Function}
3451        ]);
3452        if (e) throw e;
3453        this._addHandler(id, handler);
3454    }
3455    function Sys$EventHandlerList$_removeHandler(id, handler) {
3456        var evt = this._getEvent(id);
3457        if (!evt) return;
3458        Array.remove(evt, handler);
3459    }
3460    function Sys$EventHandlerList$removeHandler(id, handler) {
3461        /// <summary locid="M:J#Sys.EventHandlerList.removeHandler" />
3462        /// <param name="id" type="String"></param>
3463        /// <param name="handler" type="Function"></param>
3464        var e = Function._validateParams(arguments, [
3465            {name: "id", type: String},
3466            {name: "handler", type: Function}
3467        ]);
3468        if (e) throw e;
3469        this._removeHandler(id, handler);
3470    }
3471    function Sys$EventHandlerList$getHandler(id) {
3472        /// <summary locid="M:J#Sys.EventHandlerList.getHandler" />
3473        /// <param name="id" type="String"></param>
3474        /// <returns type="Function"></returns>
3475        var e = Function._validateParams(arguments, [
3476            {name: "id", type: String}
3477        ]);
3478        if (e) throw e;
3479        var evt = this._getEvent(id);
3480        if (!evt || (evt.length === 0)) return null;
3481        evt = Array.clone(evt);
3482        return function(source, args) {
3483            for (var i = 0, l = evt.length; i < l; i++) {
3484                evt[i](source, args);
3485            }
3486        };
3487    }
3488    function Sys$EventHandlerList$_getEvent(id, create) {
3489        if (!this._list[id]) {
3490            if (!create) return null;
3491            this._list[id] = [];
3492        }
3493        return this._list[id];
3494    }
3495Sys.EventHandlerList.prototype = {
3496    _addHandler: Sys$EventHandlerList$_addHandler,
3497    addHandler: Sys$EventHandlerList$addHandler,
3498    _removeHandler: Sys$EventHandlerList$_removeHandler,
3499    removeHandler: Sys$EventHandlerList$removeHandler,
3500    getHandler: Sys$EventHandlerList$getHandler,
3501    _getEvent: Sys$EventHandlerList$_getEvent
3502}
3503Sys.EventHandlerList.registerClass('Sys.EventHandlerList');
3504Sys.CommandEventArgs = function Sys$CommandEventArgs(commandName, commandArgument, commandSource) {
3505    /// <summary locid="M:J#Sys.CommandEventArgs.#ctor" />
3506    /// <param name="commandName" type="String"></param>
3507    /// <param name="commandArgument" mayBeNull="true"></param>
3508    /// <param name="commandSource" mayBeNull="true"></param>
3509    var e = Function._validateParams(arguments, [
3510        {name: "commandName", type: String},
3511        {name: "commandArgument", mayBeNull: true},
3512        {name: "commandSource", mayBeNull: true}
3513    ]);
3514    if (e) throw e;
3515    Sys.CommandEventArgs.initializeBase(this);
3516    this._commandName = commandName;
3517    this._commandArgument = commandArgument;
3518    this._commandSource = commandSource;
3519}
3520    function Sys$CommandEventArgs$get_commandName() {
3521        /// <value type="String" locid="P:J#Sys.CommandEventArgs.commandName"></value>
3522        if (arguments.length !== 0) throw Error.parameterCount();
3523        return this._commandName;
3524    }
3525    function Sys$CommandEventArgs$get_commandArgument() {
3526        /// <value mayBeNull="true" locid="P:J#Sys.CommandEventArgs.commandArgument"></value>
3527        if (arguments.length !== 0) throw Error.parameterCount();
3528        return this._commandArgument;
3529    }
3530    function Sys$CommandEventArgs$get_commandSource() {
3531        /// <value mayBeNull="true" locid="P:J#Sys.CommandEventArgs.commandSource"></value>
3532        if (arguments.length !== 0) throw Error.parameterCount();
3533        return this._commandSource;
3534    }
3535Sys.CommandEventArgs.prototype = {
3536    _commandName: null,
3537    _commandArgument: null,
3538    _commandSource: null,
3539    get_commandName: Sys$CommandEventArgs$get_commandName,
3540    get_commandArgument: Sys$CommandEventArgs$get_commandArgument,
3541    get_commandSource: Sys$CommandEventArgs$get_commandSource
3542}
3543Sys.CommandEventArgs.registerClass("Sys.CommandEventArgs", Sys.CancelEventArgs);
3544 
3545Sys.INotifyPropertyChange = function Sys$INotifyPropertyChange() {
3546    /// <summary locid="M:J#Sys.INotifyPropertyChange.#ctor" />
3547    if (arguments.length !== 0) throw Error.parameterCount();
3548    throw Error.notImplemented();
3549}
3550    function Sys$INotifyPropertyChange$add_propertyChanged(handler) {
3551    /// <summary locid="E:J#Sys.INotifyPropertyChange.propertyChanged" />
3552    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3553    if (e) throw e;
3554        throw Error.notImplemented();
3555    }
3556    function Sys$INotifyPropertyChange$remove_propertyChanged(handler) {
3557    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3558    if (e) throw e;
3559        throw Error.notImplemented();
3560    }
3561Sys.INotifyPropertyChange.prototype = {
3562    add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged,
3563    remove_propertyChanged: Sys$INotifyPropertyChange$remove_propertyChanged
3564}
3565Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange');
3566 
3567Sys.PropertyChangedEventArgs = function Sys$PropertyChangedEventArgs(propertyName) {
3568    /// <summary locid="M:J#Sys.PropertyChangedEventArgs.#ctor" />
3569    /// <param name="propertyName" type="String"></param>
3570    var e = Function._validateParams(arguments, [
3571        {name: "propertyName", type: String}
3572    ]);
3573    if (e) throw e;
3574    Sys.PropertyChangedEventArgs.initializeBase(this);
3575    this._propertyName = propertyName;
3576}
3577 
3578    function Sys$PropertyChangedEventArgs$get_propertyName() {
3579        /// <value type="String" locid="P:J#Sys.PropertyChangedEventArgs.propertyName"></value>
3580        if (arguments.length !== 0) throw Error.parameterCount();
3581        return this._propertyName;
3582    }
3583Sys.PropertyChangedEventArgs.prototype = {
3584    get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName
3585}
3586Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs', Sys.EventArgs);
3587 
3588Sys.INotifyDisposing = function Sys$INotifyDisposing() {
3589    /// <summary locid="M:J#Sys.INotifyDisposing.#ctor" />
3590    if (arguments.length !== 0) throw Error.parameterCount();
3591    throw Error.notImplemented();
3592}
3593    function Sys$INotifyDisposing$add_disposing(handler) {
3594    /// <summary locid="E:J#Sys.INotifyDisposing.disposing" />
3595    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3596    if (e) throw e;
3597        throw Error.notImplemented();
3598    }
3599    function Sys$INotifyDisposing$remove_disposing(handler) {
3600    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3601    if (e) throw e;
3602        throw Error.notImplemented();
3603    }
3604Sys.INotifyDisposing.prototype = {
3605    add_disposing: Sys$INotifyDisposing$add_disposing,
3606    remove_disposing: Sys$INotifyDisposing$remove_disposing
3607}
3608Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing");
3609 
3610Sys.Component = function Sys$Component() {
3611    /// <summary locid="M:J#Sys.Component.#ctor" />
3612    if (arguments.length !== 0) throw Error.parameterCount();
3613    if (Sys.Application) Sys.Application.registerDisposableObject(this);
3614}
3615    function Sys$Component$get_events() {
3616        /// <value type="Sys.EventHandlerList" locid="P:J#Sys.Component.events"></value>
3617        if (arguments.length !== 0) throw Error.parameterCount();
3618        if (!this._events) {
3619            this._events = new Sys.EventHandlerList();
3620        }
3621        return this._events;
3622    }
3623    function Sys$Component$get_id() {
3624        /// <value type="String" locid="P:J#Sys.Component.id"></value>
3625        if (arguments.length !== 0) throw Error.parameterCount();
3626        return this._id;
3627    }
3628    function Sys$Component$set_id(value) {
3629        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
3630        if (e) throw e;
3631        if (this._idSet) throw Error.invalidOperation(Sys.Res.componentCantSetIdTwice);
3632        this._idSet = true;
3633        var oldId = this.get_id();
3634        if (oldId && Sys.Application.findComponent(oldId)) throw Error.invalidOperation(Sys.Res.componentCantSetIdAfterAddedToApp);
3635        this._id = value;
3636    }
3637    function Sys$Component$get_isInitialized() {
3638        /// <value type="Boolean" locid="P:J#Sys.Component.isInitialized"></value>
3639        if (arguments.length !== 0) throw Error.parameterCount();
3640        return this._initialized;
3641    }
3642    function Sys$Component$get_isUpdating() {
3643        /// <value type="Boolean" locid="P:J#Sys.Component.isUpdating"></value>
3644        if (arguments.length !== 0) throw Error.parameterCount();
3645        return this._updating;
3646    }
3647    function Sys$Component$add_disposing(handler) {
3648        /// <summary locid="E:J#Sys.Component.disposing" />
3649        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3650        if (e) throw e;
3651        this.get_events().addHandler("disposing", handler);
3652    }
3653    function Sys$Component$remove_disposing(handler) {
3654        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3655        if (e) throw e;
3656        this.get_events().removeHandler("disposing", handler);
3657    }
3658    function Sys$Component$add_propertyChanged(handler) {
3659        /// <summary locid="E:J#Sys.Component.propertyChanged" />
3660        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3661        if (e) throw e;
3662        this.get_events().addHandler("propertyChanged", handler);
3663    }
3664    function Sys$Component$remove_propertyChanged(handler) {
3665        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
3666        if (e) throw e;
3667        this.get_events().removeHandler("propertyChanged", handler);
3668    }
3669    function Sys$Component$beginUpdate() {
3670        this._updating = true;
3671    }
3672    function Sys$Component$dispose() {
3673        if (this._events) {
3674            var handler = this._events.getHandler("disposing");
3675            if (handler) {
3676                handler(this, Sys.EventArgs.Empty);
3677            }
3678        }
3679        delete this._events;
3680        Sys.Application.unregisterDisposableObject(this);
3681        Sys.Application.removeComponent(this);
3682    }
3683    function Sys$Component$endUpdate() {
3684        this._updating = false;
3685        if (!this._initialized) this.initialize();
3686        this.updated();
3687    }
3688    function Sys$Component$initialize() {
3689        this._initialized = true;
3690    }
3691    function Sys$Component$raisePropertyChanged(propertyName) {
3692        /// <summary locid="M:J#Sys.Component.raisePropertyChanged" />
3693        /// <param name="propertyName" type="String"></param>
3694        var e = Function._validateParams(arguments, [
3695            {name: "propertyName", type: String}
3696        ]);
3697        if (e) throw e;
3698        if (!this._events) return;
3699        var handler = this._events.getHandler("propertyChanged");
3700        if (handler) {
3701            handler(this, new Sys.PropertyChangedEventArgs(propertyName));
3702        }
3703    }
3704    function Sys$Component$updated() {
3705    }
3706Sys.Component.prototype = {
3707    _id: null,
3708    _idSet: false,
3709    _initialized: false,
3710    _updating: false,
3711    get_events: Sys$Component$get_events,
3712    get_id: Sys$Component$get_id,
3713    set_id: Sys$Component$set_id,
3714    get_isInitialized: Sys$Component$get_isInitialized,
3715    get_isUpdating: Sys$Component$get_isUpdating,
3716    add_disposing: Sys$Component$add_disposing,
3717    remove_disposing: Sys$Component$remove_disposing,
3718    add_propertyChanged: Sys$Component$add_propertyChanged,
3719    remove_propertyChanged: Sys$Component$remove_propertyChanged,
3720    beginUpdate: Sys$Component$beginUpdate,
3721    dispose: Sys$Component$dispose,
3722    endUpdate: Sys$Component$endUpdate,
3723    initialize: Sys$Component$initialize,
3724    raisePropertyChanged: Sys$Component$raisePropertyChanged,
3725    updated: Sys$Component$updated
3726}
3727Sys.Component.registerClass('Sys.Component', null, Sys.IDisposable, Sys.INotifyPropertyChange, Sys.INotifyDisposing);
3728function Sys$Component$_setProperties(target, properties) {
3729    /// <summary locid="M:J#Sys.Component._setProperties" />
3730    /// <param name="target"></param>
3731    /// <param name="properties"></param>
3732    var e = Function._validateParams(arguments, [
3733        {name: "target"},
3734        {name: "properties"}
3735    ]);
3736    if (e) throw e;
3737    var current;
3738    var targetType = Object.getType(target);
3739    var isObject = (targetType === Object) || (targetType === Sys.UI.DomElement);
3740    var isComponent = Sys.Component.isInstanceOfType(target) && !target.get_isUpdating();
3741    if (isComponent) target.beginUpdate();
3742    for (var name in properties) {
3743        var val = properties[name];
3744        var getter = isObject ? null : target["get_" + name];
3745        if (isObject || typeof(getter) !== 'function') {
3746            var targetVal = target[name];
3747            if (!isObject && typeof(targetVal) === 'undefined') throw Error.invali
3747dOperation(String.format(Sys.Res.propertyUndefined, name));
3748            if (!val || (typeof(val) !== 'object') || (isObject && !targetVal)) {
3749                target[name] = val;
3750            }
3751            else {
3752                Sys$Component$_setProperties(targetVal, val);
3753            }
3754        }
3755        else {
3756            var setter = target["set_" + name];
3757            if (typeof(setter) === 'function') {
3758                setter.apply(target, [val]);
3759            }
3760            else if (val instanceof Array) {
3761                current = getter.apply(target);
3762                if (!(current instanceof Array)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNotAnArray, name));
3763                for (var i = 0, j = current.length, l= val.length; i < l; i++, j++) {
3764                    current[j] = val[i];
3765                }
3766            }
3767            else if ((typeof(val) === 'object') && (Object.getType(val) === Object)) {
3768                current = getter.apply(target);
3769                if ((typeof(current) === 'undefined') || (current === null)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNullOrUndefined, name));
3770                Sys$Component$_setProperties(current, val);
3771            }
3772            else {
3773                throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name));
3774            }
3775        }
3776    }
3777    if (isComponent) target.endUpdate();
3778}
3779function Sys$Component$_setReferences(component, references) {
3780    for (var name in references) {
3781        var setter = component["set_" + name];
3782        var reference = $find(references[name]);
3783        if (typeof(setter) !== 'function') throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name));
3784        if (!reference) throw Error.invalidOperation(String.format(Sys.Res.referenceNotFound, references[name]));
3785        setter.apply(component, [reference]);
3786    }
3787}
3788var $create = Sys.Component.create = function Sys$Component$create(type, properties, events, references, element) {
3789    /// <summary locid="M:J#Sys.Component.create" />
3790    /// <param name="type" type="Type"></param>
3791    /// <param name="properties" optional="true" mayBeNull="true"></param>
3792    /// <param name="events" optional="true" mayBeNull="true"></param>
3793    /// <param name="references" optional="true" mayBeNull="true"></param>
3794    /// <param name="element" domElement="true" optional="true" mayBeNull="true"></param>
3795    /// <returns type="Sys.UI.Component"></returns>
3796    var e = Function._validateParams(arguments, [
3797        {name: "type", type: Type},
3798        {name: "properties", mayBeNull: true, optional: true},
3799        {name: "events", mayBeNull: true, optional: true},
3800        {name: "references", mayBeNull: true, optional: true},
3801        {name: "element", mayBeNull: true, domElement: true, optional: true}
3802    ]);
3803    if (e) throw e;
3804    if (!type.inheritsFrom(Sys.Component)) {
3805        throw Error.argument('type', String.format(Sys.Res.createNotComponent, type.getName()));
3806    }
3807    if (type.inheritsFrom(Sys.UI.Behavior) || type.inheritsFrom(Sys.UI.Control)) {
3808        if (!element) throw Error.argument('element', Sys.Res.createNoDom);
3809    }
3810    else if (element) throw Error.argument('element', Sys.Res.createComponentOnDom);
3811    var component = (element ? new type(element): new type());
3812    var app = Sys.Application;
3813    var creatingComponents = app.get_isCreatingComponents();
3814    component.beginUpdate();
3815    if (properties) {
3816        Sys$Component$_setProperties(component, properties);
3817    }
3818    if (events) {
3819        for (var name in events) {
3820            if (!(component["add_" + name] instanceof Function)) throw new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name));
3821            if (!(events[name] instanceof Function)) throw new Error.invalidOperation(Sys.Res.eventHandlerNotFunction);
3822            component["add_" + name](events[name]);
3823        }
3824    }
3825    if (component.get_id()) {
3826        app.addComponent(component);
3827    }
3828    if (creatingComponents) {
3829        app._createdComponents[app._createdComponents.length] = component;
3830        if (references) {
3831            app._addComponentToSecondPass(component, references);
3832        }
3833        else {
3834            component.endUpdate();
3835        }
3836    }
3837    else {
3838        if (references) {
3839            Sys$Component$_setReferences(component, references);
3840        }
3841        component.endUpdate();
3842    }
3843    return component;
3844}
3845 
3846Sys.UI.MouseButton = function Sys$UI$MouseButton() {
3847    /// <summary locid="M:J#Sys.UI.MouseButton.#ctor" />
3848    /// <field name="leftButton" type="Number" integer="true" static="true" locid="F:J#Sys.UI.MouseButton.leftButton"></field>
3849    /// <field name="middleButton" type="Number" integer="true" static="true" locid="F:J#Sys.UI.MouseButton.middleButton"></field>
3850    /// <field name="rightButton" type="Number" integer="true" static="true" locid="F:J#Sys.UI.MouseButton.rightButton"></field>
3851    if (arguments.length !== 0) throw Error.parameterCount();
3852    throw Error.notImplemented();
3853}
3854Sys.UI.MouseButton.prototype = {
3855    leftButton: 0,
3856    middleButton: 1,
3857    rightButton: 2
3858}
3859Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton");
3860 
3861Sys.UI.Key = function Sys$UI$Key() {
3862    /// <summary locid="M:J#Sys.UI.Key.#ctor" />
3863    /// <field name="backspace" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.backspace"></field>
3864    /// <field name="tab" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.tab"></field>
3865    /// <field name="enter" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.enter"></field>
3866    /// <field name="esc" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.esc"></field>
3867    /// <field name="space" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.space"></field>
3868    /// <field name="pageUp" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.pageUp"></field>
3869    /// <field name="pageDown" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.pageDown"></field>
3870    /// <field name="end" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.end"></field>
3871    /// <field name="home" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.home"></field>
3872    /// <field name="left" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.left"></field>
3873    /// <field name="up" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.up"></field>
3874    /// <field name="right" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.right"></field>
3875    /// <field name="down" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.down"></field>
3876    /// <field name="del" type="Number" integer="true" static="true" locid="F:J#Sys.UI.Key.del"></field>
3877    if (arguments.length !== 0) throw Error.parameterCount();
3878    throw Error.notImplemented();
3879}
3880Sys.UI.Key.prototype = {
3881    backspace: 8,
3882    tab: 9,
3883    enter: 13,
3884    esc: 27,
3885    space: 32,
3886    pageUp: 33,
3887    pageDown: 34,
3888    end: 35,
3889    home: 36,
3890    left: 37,
3891    up: 38,
3892    right: 39,
3893    down: 40,
3894    del: 127
3895}
3896Sys.UI.Key.registerEnum("Sys.UI.Key");
3897 
3898Sys.UI.Point = function Sys$UI$Point(x, y) {
3899    /// <summary locid="M:J#Sys.UI.Point.#ctor" />
3900    /// <param name="x" type="Number"></param>
3901    /// <param name="y" type="Number"></param>
3902    /// <field name="x" type="Number" integer="true" locid="F:J#Sys.UI.Point.x"></field>
3903    /// <field name="y" type="Number" integer="true" locid="F:J#Sys.UI.Point.y"></field>
3904    /// <field name="rawX" type="Number" locid="F:J#Sys.UI.Point.rawX"></field>
3905    /// <field name="rawY" type="Number" locid="F:J#Sys.UI.Point.rawY"></field>
3906    var e = Function._validateParams(arguments, [
3907        {name: "x", type: Number},
3908        {name: "y", type: Number}
3909    ]);
3910    if (e) throw e;
3911    this.rawX = x;
3912    this.rawY = y;
3913    this.x = Math.round(x);
3914    this.y = Math.round(y);
3915}
3916Sys.UI.Point.registerClass('Sys.UI.Point');
3917 
3918Sys.UI.Bounds = function Sys$UI$Bounds(x, y, width, height) {
3919    /// <summary locid="M:J#Sys.UI.Bounds.#ctor" />
3920    /// <param name="x" type="Number" integer="true"></param>
3921    /// <param name="y" type="Number" integer="true"></param>
3922    /// <param name="width" type="Number" integer="true"></param>
3923    /// <param name="height" type="Number" integer="true"></param>
3924    /// <field name="x" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.x"></field>
3925    /// <field name="y" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.y"></field>
3926    /// <field name="width" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.width"></field>
3927    /// <field name="height" type="Number" integer="true" locid="F:J#Sys.UI.Bounds.height"></field>
3928    var e = Function._validateParams(arguments, [
3929        {name: "x", type: Number, integer: true},
3930        {name: "y", type: Number, integer: true},
3931        {name: "width", type: Number, integer: true},
3932        {name: "height", type: Number, integer: true}
3933    ]);
3934    if (e) throw e;
3935    this.x = x;
3936    this.y = y;
3937    this.height = height;
3938    this.width = width;
3939}
3940Sys.UI.Bounds.registerClass('Sys.UI.Bounds');
3941 
3942Sys.UI.DomEvent = function Sys$UI$DomEvent(eventObject) {
3943    /// <summary locid="M:J#Sys.UI.DomEvent.#ctor" />
3944    /// <param name="eventObject"></param>
3945    /// <field name="altKey" type="Boolean" locid="F:J#Sys.UI.DomEvent.altKey"></field>
3946    /// <field name="button" type="Sys.UI.MouseButton" locid="F:J#Sys.UI.DomEvent.button"></field>
3947    /// <field name="charCode" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.charCode"></field>
3948    /// <field name="clientX" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.clientX"></field>
3949    /// <field name="clientY" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.clientY"></field>
3950    /// <field name="ctrlKey" type="Boolean" locid="F:J#Sys.UI.DomEvent.ctrlKey"></field>
3951    /// <field name="keyCode" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.keyCode"></field>
3952    /// <field name="offsetX" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.offsetX"></field>
3953    /// <field name="offsetY" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.offsetY"></field>
3954    /// <field name="screenX" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.screenX"></field>
3955    /// <field name="screenY" type="Number" integer="true" locid="F:J#Sys.UI.DomEvent.screenY"></field>
3956    /// <field name="shiftKey" type="Boolean" locid="F:J#Sys.UI.DomEvent.shiftKey"></field>
3957    /// <field name="target" locid="F:J#Sys.UI.DomEvent.target"></field>
3958    /// <field name="type" type="String" locid="F:J#Sys.UI.DomEvent.type"></field>
3959    var e = Function._validateParams(arguments, [
3960        {name: "eventObject"}
3961    ]);
3962    if (e) throw e;
3963    var ev = eventObject;
3964    var etype = this.type = ev.type.toLowerCase();
3965    this.rawEvent = ev;
3966    this.altKey = ev.altKey;
3967    if (typeof(ev.button) !== 'undefined') {
3968        this.button = (typeof(ev.which) !== 'undefined') ? ev.button :
3969            (ev.button === 4) ? Sys.UI.MouseButton.middleButton :
3970            (ev.button === 2) ? Sys.UI.MouseButton.rightButton :
3971            Sys.UI.MouseButton.leftButton;
3972    }
3973    if (etype === 'keypress') {
3974        this.charCode = ev.charCode || ev.keyCode;
3975    }
3976    else if (ev.keyCode && (ev.keyCode === 46)) {
3977        this.keyCode = 127;
3978    }
3979    else {
3980        this.keyCode = ev.keyCode;
3981    }
3982    this.clientX = ev.clientX;
3983    this.clientY = ev.clientY;
3984    this.ctrlKey = ev.ctrlKey;
3985    this.target = ev.target ? ev.target : ev.srcElement;
3986    if (!etype.startsWith('key')) {
3987        if ((typeof(ev.offsetX) !== 'undefined') && (typeof(ev.offsetY) !== 'undefined')) {
3988            this.offsetX = ev.offsetX;
3989            this.offsetY = ev.offsetY;
3990        }
3991        else if (this.target && (this.target.nodeType !== 3) && (typeof(ev.clientX) === 'number')) {
3992            var loc = Sys.UI.DomElement.getLocation(this.target);
3993            var w = Sys.UI.DomElement._getWindow(this.target);
3994            this.offsetX = (w.pageXOffset || 0) + ev.clientX - loc.x;
3995            this.offsetY = (w.pageYOffset || 0) + ev.clientY - loc.y;
3996        }
3997    }
3998    this.screenX = ev.screenX;
3999    this.screenY = ev.screenY;
4000    this.shiftKey = ev.shiftKey;
4001}
4002    function Sys$UI$DomEvent$preventDefault() {
4003        /// <summary locid="M:J#Sys.UI.DomEvent.preventDefault" />
4004        if (arguments.length !== 0) throw Error.parameterCount();
4005        if (this.rawEvent.preventDefault) {
4006            this.rawEvent.preventDefault();
4007        }
4008        else if (window.event) {
4009            this.rawEvent.returnValue = false;
4010        }
4011    }
4012    function Sys$UI$DomEvent$stopPropagation() {
4013        /// <summary locid="M:J#Sys.UI.DomEvent.stopPropagation" />
4014        if (arguments.length !== 0) throw Error.parameterCount();
4015        if (this.rawEvent.stopPropagation) {
4016            this.rawEvent.stopPropagation();
4017        }
4018        else if (window.event) {
4019            this.rawEvent.cancelBubble = true;
4020        }
4021    }
4022Sys.UI.DomEvent.prototype = {
4023    preventDefault: Sys$UI$DomEvent$preventDefault,
4024    stopPropagation: Sys$UI$DomEvent$stopPropagation
4025}
4026Sys.UI.DomEvent.registerClass('Sys.UI.DomEvent');
4027var $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler, autoRemove) {
4028    /// <summary locid="M:J#Sys.UI.DomEvent.addHandler" />
4029    /// <param name="element"></param>
4030    /// <param name="eventName" type="String"></param>
4031    /// <param name="handler" type="Function"></param>
4032    /// <param name="autoRemove" type="Boolean" optional="true"></param>
4033    var e = Function._validateParams(arguments, [
4034        {name: "element"},
4035        {name: "eventName", type: String},
4036        {name: "handler", type: Function},
4037        {name: "autoRemove", type: Boolean, optional: true}
4038    ]);
4039    if (e) throw e;
4040    Sys.UI.DomEvent._ensureDomNode(element);
4041    if (eventName === "error") throw Error.invalidOperation(Sys.Res.addHandlerCantBeUsedForError);
4042    if (!element._events) {
4043        element._events = {};
4044    }
4045    var eventCache = element._events[eventName];
4046    if (!eventCache) {
4047        element._events[eventName] = eventCache = [];
4048    }
4049    var browserHandler;
4050    if (element.addEventListener) {
4051        browserHandler = function(e) {
4052            return handler.call(element, new Sys.UI.DomEvent(e));
4053        }
4054        element.addEventListener(eventName, browserHandler, false);
4055    }
4056    else if (element.attachEvent) {
4057        browserHandler = function() {
4058            var e = {};
4059            try {e = Sys.UI.DomElement._getWindow(element).event} catch(ex) {}
4060            return handler.call(element, new Sys.UI.DomEvent(e));
4061        }
4062        element.attachEvent('on' + eventName, browserHandler);
4063    }
4064    eventCache[eventCache.length] = {handler: handler, browserHandler: browserHandler, autoRemove: autoRemove };
4065    if (autoRemove) {
4066        var d = element.dispose;
4067        if (d !== Sys.UI.DomEvent._disposeHandlers) {
4068            element.dispose = Sys.UI.DomEvent._disposeHandlers;
4069            if (typeof(d) !== "undefined") {
4070                element._chainDispose = d;
4071            }
4072        }
4073    }
4074}
4075var $addHandlers = Sys.UI.DomEvent.addHandlers = function Sys$UI$DomEvent$addHandlers(element, events, handlerOwner, autoRemove) {
4076    /// <summary locid="M:J#Sys.UI.DomEvent.addHandlers" />
4077    /// <param name="element"></param>
4078    /// <param name="events" type="Object"></param>
4079    /// <param name="handlerOwner" optional="true"></param>
4080    /// <param name="autoRemove" type="Boolean" optional="true"></param>
4081    var e = Function._validateParams(arguments, [
4082        {name: "element"},
4083        {name: "events", type: Object},
4084        {name: "handlerOwner", optional: true},
4085        {name: "autoRemove", type: Boolean, optional: true}
4086    ]);
4087    if (e) throw e;
4088    Sys.UI.DomEvent._ensureDomNode(element);
4089    for (var name in events) {
4090        var handler = events[name];
4091        if (typeof(handler) !== 'function') throw Error.invalidOperation(Sys.Res.cantAddNonFunctionhandler);
4092        if (handlerOwner) {
4093            handler = Function.createDelegate(handlerOwner, handler);
4094        }
4095        $addHandler(element, name, handler, autoRemove || false);
4096    }
4097}
4098var $clearHandlers = Sys.UI.DomEvent.clearHandlers = function Sys$UI$DomEvent$clearHandlers(element) {
4099    /// <summary locid="M:J#Sys.UI.DomEvent.clearHandlers" />
4100    /// <param name="element"></param>
4101    var e = Function._validateParams(arguments, [
4102        {name: "element"}
4103    ]);
4104    if (e) throw e;
4105    Sys.UI.DomEvent._ensureDomNode(element);
4106    Sys.UI.DomEvent._clearHandlers(element, false);
4107}
4108Sys.UI.DomEvent._clearHandlers = function Sys$UI$DomEvent$_clearHandlers(element, autoRemoving) {
4109    if (element._events) {
4110        var cache = element._events;
4111        for (var name in cache) {
4112            var handlers = cache[name];
4113            for (var i = handlers.length - 1; i >= 0; i--) {
4114                var entry = handlers[i];
4115                if (!autoRemoving || entry.autoRemove) {
4116                    $removeHandler(element, name, entry.handler);
4117                }
4118            }
4119        }
4120        element._events = null;
4121    }
4122}
4123Sys.UI.DomEvent._disposeHandlers = function Sys$UI$DomEvent$_disposeHandlers() {
4124    Sys.UI.DomEvent._clearHandlers(this, true);
4125    var d = this._chainDispose, type = typeof(d);
4126    if (type !== "undefined") {
4127        this.dispose = d;
4128        this._chainDispose = null;
4129        if (type === "function") {
4130            this.dispose();
4131        }
4132    }
4133}
4134var $removeHandler = Sys.UI.DomEvent.removeHandler = function Sys$UI$DomEvent$removeHandler(element, eventName, handler) {
4135    /// <summary locid="M:J#Sys.UI.DomEvent.removeHandler" />
4136    /// <param name="element"></param>
4137    /// <param name="eventName" type="String"></param>
4138    /// <param name="handler" type="Function"></param>
4139    var e = Function._validateParams(arguments, [
4140        {name: "element"},
4141        {name: "eventName", type: String},
4142        {name: "handler", type: Function}
4143    ]);
4144    if (e) throw e;
4145    Sys.UI.DomEvent._removeHandler(element, eventName, handler);
4146}
4147Sys.UI.DomEvent._removeHandler = function Sys$UI$DomEvent$_removeHandler(element, eventName, handler) {
4148    Sys.UI.DomEvent._ensureDomNode(element);
4149    var browserHandler = null;
4150    if ((typeof(element._events) !== 'object') || !element._events) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);
4151    var cache = element._events[eventName];
4152    if (!(cache instanceof Array)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);
4153    for (var i = 0, l = cache.length; i < l; i++) {
4154        if (cache[i].handler === handler) {
4155            browserHandler = cache[i].browserHandler;
4156            break;
4157        }
4158    }
4159    if (typeof(browserHandler) !== 'function') throw Error.invalidOperation(Sys.Res.eventHandlerInvalid);
4160    if (element.removeEventListener) {
4161        element.removeEventListener(eventName, browserHandler, false);
4162    }
4163    else if (element.detachEvent) {
4164        element.detachEvent('on' + eventName, browserHandler);
4165    }
4166    cache.splice(i, 1);
4167}
4168Sys.UI.DomEvent._ensureDomNode = function Sys$UI$DomEvent$_ensureDomNode(element) {
4169    if (element.tagName && (element.tagName.toUpperCase() === "SCRIPT")) return;
4170    
4171    var doc = element.ownerDocument || element.document || element;
4172    if ((typeof(element.document) !== 'object') && (element != doc) && (typeof(element.nodeType) !== 'number')) {
4173        throw Error.argument("element", Sys.Res.argumentDomNode);
4174    }
4175}
4176 
4177Sys.UI.DomElement = function Sys$UI$DomElement() {
4178    /// <summary locid="M:J#Sys.UI.DomElement.#ctor" />
4179    if (arguments.length !== 0) throw Error.parameterCount();
4180    throw Error.notImplemented();
4181}
4182Sys.UI.DomElement.registerClass('Sys.UI.DomElement');
4183Sys.UI.DomElement.addCssClass = function Sys$UI$DomElement$addCssClass(element, className) {
4184    /// <summary locid="M:J#Sys.UI.DomElement.addCssClass" />
4185    /// <param name="element" domElement="true"></param>
4186    /// <param name="className" type="String"></param>
4187    var e = Function._validateParams(arguments, [
4188        {name: "element", domElement: true},
4189        {name: "className", type: String}
4190    ]);
4191    if (e) throw e;
4192    if (!Sys.UI.DomElement.containsCssClass(element, className)) {
4193        if (element.className === '') {
4194            element.className = className;
4195        }
4196        else {
4197            element.className += ' ' + className;
4198        }
4199    }
4200}
4201Sys.UI.DomElement.containsCssClass = function Sys$UI$DomElement$containsCssClass(element, className) {
4202    /// <summary locid="M:J#Sys.UI.DomElement.containsCssClass" />
4203    /// <param name="element" domElement="true"></param>
4204    /// <param name="className" type="String"></param>
4205    /// <returns type="Boolean"></returns>
4206    var e = Function._validateParams(arguments, [
4207        {name: "element", domElement: true},
4208        {name: "className", type: String}
4209    ]);
4210    if (e) throw e;
4211    return Array.contains(element.className.split(' '), className);
4212}
4213Sys.UI.DomElement.getBounds = function Sys$UI$DomElement$getBounds(element) {
4214    /// <summary locid="M:J#Sys.UI.DomElement.getBounds" />
4215    /// <param name="element" domElement="true"></param>
4216    /// <returns type="Sys.UI.Bounds"></returns>
4217    var e = Function._validateParams(arguments, [
4218        {name: "element", domElement: true}
4219    ]);
4220    if (e) throw e;
4221    var offset = Sys.UI.DomElement.getLocation(element);
4222    return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || 0, element.offsetHeight || 0);
4223}
4224var $get = Sys.UI.DomElement.getElementById = function Sys$UI$DomElement$getElementById(id, element) {
4225    /// <summary locid="M:J#Sys.UI.DomElement.getElementById" />
4226    /// <param name="id" type="String"></param>
4227    /// <param name="element" domElement="true" optional="true" mayBeNull="true"></param>
4228    /// <returns domElement="true" mayBeNull="true"></returns>
4229    var e = Function._validateParams(arguments, [
4230        {name: "id", type: String},
4231        {name: "element", mayBeNull: true, domElement: true, optional: true}
4232    ]);
4233    if (e) throw e;
4234    if (!element) return document.getElementById(id);
4235    if (element.getElementById) return element.getElementById(id);
4236    var nodeQueue = [];
4237    var childNodes = element.childNodes;
4238    for (var i = 0; i < childNodes.length; i++) {
4239        var node = childNodes[i];
4240        if (node.nodeType == 1) {
4241            nodeQueue[nodeQueue.length] = node;
4242        }
4243    }
4244    while (nodeQueue.length) {
4245        node = nodeQueue.shift();
4246        if (node.id == id) {
4247            return node;
4248        }
4249        childNodes = node.childNodes;
4250        for (i = 0; i < childNodes.length; i++) {
4251            node = childNodes[i];
4252            if (node.nodeType == 1) {
4253                nodeQueue[nodeQueue.length] = node;
4254            }
4255        }
4256    }
4257    return null;
4258}
4259if (document.documentElement.getBoundingClientRect) {
4260    Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) {
4261        /// <summary locid="M:J#Sys.UI.DomElement.getLocation" />
4262        /// <param name="element" domElement="true"></param>
4263        /// <returns type="Sys.UI.Point"></returns>
4264        var e = Function._validateParams(arguments, [
4265            {name: "element", domElement: true}
4266        ]);
4267        if (e) throw e;
4268        if (element.self || element.nodeType === 9 || 
4269            (element === document.documentElement) || 
4270            (element.parentNode === element.ownerDocument.documentElement)) { 
4271            return new Sys.UI.Point(0, 0);
4272        }        
4273        
4274        var clientRect = element.getBoundingClientRect();
4275        if (!clientRect) {
4276            return new Sys.UI.Point(0,0);
4277        }
4278        var documentElement = element.ownerDocument.documentElement;
4279        var bodyElement = element.ownerDocument.body;
4280        var ex,
4281            offsetX = Math.round(clientRect.left) + (documentElement.scrollLeft || bodyElement.scrollLeft),
4282            offsetY = Math.round(clientRect.top) + (documentElement.scrollTop || bodyElement.scrollTop);
4283        if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
4284            try {
4285                var f = element.ownerDocument.parentWindow.frameElement || null;
4286                if (f) {
4287                    var offset = (f.frameBorder === "0" || f.frameBorder === "no") ? 2 : 0;
4288                    offsetX += offset;
4289                    offsetY += offset;
4290                }
4291            }
4292            catch(ex) {
4293            }
4294            if (Sys.Browser.version === 7 && !document.documentMode) {
4295                var body = document.body,
4296                    rect = body.getBoundingClientRect(),
4297                    zoom = (rect.right-rect.left) / body.clientWidth;
4298                zoom = Math.round(zoom * 100);
4299                zoom = (zoom - zoom % 5) / 100;
4300                if (!isNaN(zoom) && (zoom !== 1)) {
4301                    offsetX = Math.round(offsetX / zoom);
4302                    offsetY = Math.round(offsetY / zoom);
4303                }
4304            }        
4305            if ((document.documentMode || 0) < 8) {
4306                offsetX -= documentElement.clientLeft;
4307                offsetY -= documentElement.clientTop;
4308            }
4309        }
4310        return new Sys.UI.Point(offsetX, offsetY);
4311    }
4312}
4313else if (Sys.Browser.agent === Sys.Browser.Safari) {
4314    Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) {
4315        /// <summary locid="M:J#Sys.UI.DomElement.getLocation" />
4316        /// <param name="element" domElement="true"></param>
4317        /// <returns type="Sys.UI.Point"></returns>
4318        var e = Function._validateParams(arguments, [
4319            {name: "element", domElement: true}
4320        ]);
4321        if (e) throw e;
4322        if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0);
4323        var offsetX = 0, offsetY = 0,
4324            parent,
4325            previous = null,
4326            previousStyle = null,
4327            currentStyle;
4328        for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {
4329            currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);
4330            var tagName = parent.tagName ? parent.tagName.toUpperCase() : null;
4331            if ((parent.offsetLeft || parent.offsetTop) &&
4332                ((tagName !== "BODY") || (!previousStyle || previousStyle.position !== "absolute"))) {
4333                offsetX += parent.offsetLeft;
4334                offsetY += parent.offsetTop;
4335            }
4336            if (previous && Sys.Browser.version >= 3) {
4337                offsetX += parseInt(currentStyle.borderLeftWidth);
4338                offsetY += parseInt(currentStyle.borderTopWidth);
4339            }
4340        }
4341        currentStyle = Sys.UI.DomElement._getCurrentStyle(element);
4342        var elementPosition = currentStyle ? currentStyle.position : null;
4343        if (!elementPosition || (elementPosition !== "absolute")) {
4344            for (parent = element.parentNode; parent; parent = parent.parentNode) {
4345                tagName = parent.tagName ? parent.tagName.toUpperCase() : null;
4346                if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {
4347                    offsetX -= (parent.scrollLeft || 0);
4348                    offsetY -= (parent.scrollTop || 0);
4349                }
4350                currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);
4351                var parentPosition = currentStyle ? currentStyle.position : null;
4352                if (parentPosition && (parentPosition === "absolute")) break;
4353            }
4354        }
4355        return new Sys.UI.Point(offsetX, offsetY);
4356    }
4357}
4358else {
4359    Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) {
4360        /// <summary locid="M:J#Sys.UI.DomElement.getLocation" />
4361        /// <param name="element" domElement="true"></param>
4362        /// <returns type="Sys.UI.Point"></returns>
4363        var e = Function._validateParams(arguments, [
4364            {name: "element", domElement: true}
4365        ]);
4366        if (e) throw e;
4367        if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0);
4368        var offsetX = 0, offsetY = 0,
4369            parent,
4370            previous = null,
4371            previousStyle = null,
4372            currentStyle = null;
4373        for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {
4374            var tagName = parent.tagName ? parent.tagName.toUpperCase() : null;
4375            currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);
4376            if ((parent.offsetLeft || parent.offsetTop) &&
4377                !((tagName === "BODY") &&
4378                (!previousStyle || previousStyle.position !== "absolute"))) {
4379                offsetX += parent.offsetLeft;
4380                offsetY += parent.offsetTop;
4381            }
4382            if (previous !== null && currentStyle) {
4383                if ((tagName !== "TABLE") && (tagName !== "TD") && (tagName !== "HTML")) {
4384                    offsetX += parseInt(currentStyle.borderLeftWidth) || 0;
4385                    offsetY += parseInt(currentStyle.borderTopWidth) || 0;
4386                }
4387                if (tagName === "TABLE" &&
4388                    (currentStyle.position === "relative" || currentStyle.position === "absolute")) {
4389                    offsetX += parseInt(currentStyle.marginLeft) || 0;
4390                    offsetY += parseInt(currentStyle.marginTop) || 0;
4391                }
4392            }
4393        }
4394        currentStyle = Sys.UI.DomElement._getCurrentStyle(element);
4395        var elementPosition = currentStyle ? currentStyle.position : null;
4396        if (!elementPosition || (elementPosition !== "absolute")) {
4397            for (parent = element.parentNode; parent; parent = parent.parentNode) {
4398                tagName = parent.tagName ? parent.tagName.toUpperCase() : null;
4399                if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {
4400                    offsetX -= (parent.scrollLeft || 0);
4401                    offsetY -= (parent.scrollTop || 0);
4402                    currentStyle = Sys.UI.DomElement._getCurrentStyle(parent);
4403                    if (currentStyle) {
4404                        offsetX += parseInt(currentStyle.borderLeftWidth) || 0;
4405                        offsetY += parseInt(currentStyle.borderTopWidth) || 0;
4406                    }
4407                }
4408            }
4409        }
4410        return new Sys.UI.Point(offsetX, offsetY);
4411    }
4412}
4413Sys.UI.DomElement.isDomElement = function Sys$UI$DomElement$isDomElement(obj) {
4414    /// <summary locid="M:J#Sys.UI.DomElement.isDomElement" />
4415    /// <param name="obj"></param>
4416    /// <returns type="Boolean"></returns>
4417    var e = Function._validateParams(arguments, [
4418        {name: "obj"}
4419    ]);
4420    if (e) throw e;
4421    return Sys._isDomElement(obj);
4422}
4423Sys.UI.DomElement.removeCssClass = function Sys$UI$DomElement$removeCssClass(element, className) {
4424    /// <summary locid="M:J#Sys.UI.DomElement.removeCssClass" />
4425    /// <param name="element" domElement="true"></param>
4426    /// <param name="className" type="String"></param>
4427    var e = Function._validateParams(arguments, [
4428        {name: "element", domElement: true},
4429        {name: "className", type: String}
4430    ]);
4431    if (e) throw e;
4432    var currentClassName = ' ' + element.className + ' ';
4433    var index = currentClassName.indexOf(' ' + className + ' ');
4434    if (index >= 0) {
4435        element.className = (currentClassName.substr(0, index) + ' ' +
4436            currentClassName.substring(index + className.length + 1, currentClassName.length)).trim();
4437    }
4438}
4439Sys.UI.DomElement.resolveElement = function Sys$UI$DomElement$resolveElement(elementOrElementId, containerElement) {
4440    /// <summary locid="M:J#Sys.UI.DomElement.resolveElement" />
4441    /// <param name="elementOrElementId" mayBeNull="true"></param>
4442    /// <param name="containerElement" domElement="true" optional="true" mayBeNull="true"></param>
4443    /// <returns domElement="true"></returns>
4444    var e = Function._validateParams(arguments, [
4445        {name: "elementOrElementId", mayBeNull: true},
4446        {name: "containerElement", mayBeNull: true, domElement: true, optional: true}
4447    ]);
4448    if (e) throw e;
4449    var el = elementOrElementId;
4450    if (!el) return null;
4451    if (typeof(el) === "string") {
4452        el = Sys.UI.DomElement.getElementById(el, containerElement);
4453        if (!el) {
4454            throw Error.argument("elementOrElementId", String.format(Sys.Res.elementNotFound, elementOrElementId));
4455        }
4456    }
4457    else if(!Sys.UI.DomElement.isDomElement(el)) {
4458        throw Error.argument("elementOrElementId", Sys.Res.expectedElementOrId);
4459    }
4460    return el;
4461}
4462Sys.UI.DomElement.raiseBubbleEvent = function Sys$UI$DomElement$raiseBubbleEvent(source, args) {
4463    /// <summary locid="M:J#Sys.UI.DomElement.raiseBubbleEvent" />
4464    /// <param name="source" domElement="true"></param>
4465    /// <param name="args" type="Sys.EventArgs"></param>
4466    var e = Function._validateParams(arguments, [
4467        {name: "source", domElement: true},
4468        {name: "args", type: Sys.EventArgs}
4469    ]);
4470    if (e) throw e;
4471    var target = source;
4472    while (target) {
4473        var control = target.control;
4474        if (control && control.onBubbleEvent && control.raiseBubbleEvent) {
4475            Sys.UI.DomElement._raiseBubbleEventFromControl(control, source, args);
4476            return;
4477        }
4478        target = target.parentNode;
4479    }
4480}
4481Sys.UI.DomElement._raiseBubbleEventFromControl = function Sys$UI$DomElement$_raiseBubbleEventFromControl(control, source, args) {
4482    if (!control.onBubbleEvent(source, args)) {
4483        control._raiseBubbleEvent(source, args);
4484    }
4485}
4486Sys.UI.DomElement.setLocation = function Sys$UI$DomElement$setLocation(element, x, y) {
4487    /// <summary locid="M:J#Sys.UI.DomElement.setLocation" />
4488    /// <param name="element" domElement="true"></param>
4489    /// <param name="x" type="Number" integer="true"></param>
4490    /// <param name="y" type="Number" integer="true"></param>
4491    var e = Function._validateParams(arguments, [
4492        {name: "element", domElement: true},
4493        {name: "x", type: Number, integer: true},
4494        {name: "y", type: Number, integer: true}
4495    ]);
4496    if (e) throw e;
4497    var style = element.style;
4498    style.position = 'absolute';
4499    style.left = x + "px";
4500    style.top = y + "px";
4501}
4502Sys.UI.DomElement.toggleCssClass = function Sys$UI$DomElement$toggleCssClass(element, className) {
4503    /// <summary locid="M:J#Sys.UI.DomElement.toggleCssClass" />
4504    /// <param name="element" domElement="true"></param>
4505    /// <param name="className" type="String"></param>
4506    var e = Function._validateParams(arguments, [
4507        {name: "element", domElement: true},
4508        {name: "className", type: String}
4509    ]);
4510    if (e) throw e;
4511    if (Sys.UI.DomElement.containsCssClass(element, className)) {
4512        Sys.UI.DomElement.removeCssClass(element, className);
4513    }
4514    else {
4515        Sys.UI.DomElement.addCssClass(element, className);
4516    }
4517}
4518Sys.UI.DomElement.getVisibilityMode = function Sys$UI$DomElement$getVisibilityMode(element) {
4519    /// <summary locid="M:J#Sys.UI.DomElement.getVisibilityMode" />
4520    /// <param name="element" domElement="true"></param>
4521    /// <returns type="Sys.UI.VisibilityMode"></returns>
4522    var e = Function._validateParams(arguments, [
4523        {name: "element", domElement: true}
4524    ]);
4525    if (e) throw e;
4526    return (element._visibilityMode === Sys.UI.VisibilityMode.hide) ?
4527        Sys.UI.VisibilityMode.hide :
4528        Sys.UI.VisibilityMode.collapse;
4529}
4530Sys.UI.DomElement.setVisibilityMode = function Sys$UI$DomElement$setVisibilityMode(element, value) {
4531    /// <summary locid="M:J#Sys.UI.DomElement.setVisibilityMode" />
4532    /// <param name="element" domElement="true"></param>
4533    /// <param name="value" type="Sys.UI.VisibilityMode"></param>
4534    var e = Function._validateParams(arguments, [
4535        {name: "element", domElement: true},
4536        {name: "value", type: Sys.UI.VisibilityMode}
4537    ]);
4538    if (e) throw e;
4539    Sys.UI.DomElement._ensureOldDisplayMode(element);
4540    if (element._visibilityMode !== value) {
4541        element._visibilityMode = value;
4542        if (Sys.UI.DomElement.getVisible(element) === false) {
4543            if (element._visibilityMode === Sys.UI.VisibilityMode.hide) {
4544                element.style.display = element._oldDisplayMode;
4545            }
4546            else {
4547                element.style.display = 'none';
4548            }
4549        }
4550        element._visibilityMode = value;
4551    }
4552}
4553Sys.UI.DomElement.getVisible = function Sys$UI$DomElement$getVisible(element) {
4554    /// <summary locid="M:J#Sys.UI.DomElement.getVisible" />
4555    /// <param name="element" domElement="true"></param>
4556    /// <returns type="Boolean"></returns>
4557    var e = Function._validateParams(arguments, [
4558        {name: "element", domElement: true}
4559    ]);
4560    if (e) throw e;
4561    var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element);
4562    if (!style) return true;
4563    return (style.visibility !== 'hidden') && (style.display !== 'none');
4564}
4565Sys.UI.DomElement.setVisible = function Sys$UI$DomElement$setVisible(element, value) {
4566    /// <summary locid="M:J#Sys.UI.DomElement.setVisible" />
4567    /// <param name="element" domElement="true"></param>
4568    /// <param name="value" type="Boolean"></param>
4569    var e = Function._validateParams(arguments, [
4570        {name: "element", domElement: true},
4571        {name: "value", type: Boolean}
4572    ]);
4573    if (e) throw e;
4574    if (value !== Sys.UI.DomElement.getVisible(element)) {
4575        Sys.UI.DomElement._ensureOldDisplayMode(element);
4576        element.style.visibility = value ? 'visible' : 'hidden';
4577        if (value || (element._visibilityMode === Sys.UI.VisibilityMode.hide)) {
4578            element.style.display = element._oldDisplayMode;
4579        }
4580        else {
4581            element.style.display = 'none';
4582        }
4583    }
4584}
4585Sys.UI.DomElement._ensureOldDisplayMode = function Sys$UI$DomElement$_ensureOldDisplayMode(element) {
4586    if (!element._oldDisplayMode) {
4587        var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element);
4588        element._oldDisplayMode = style ? style.display : null;
4589        if (!element._oldDisplayMode || element._oldDisplayMode === 'none') {
4590            switch(element.tagName.toUpperCase()) {
4591                case 'DIV': case 'P': case 'ADDRESS': case 'BLOCKQUOTE': case 'BODY': case 'COL':
4592                case 'COLGROUP': case 'DD': case 'DL': case 'DT': case 'FIELDSET': case 'FORM':
4593                case 'H1': case 'H2': case 'H3': case 'H4': case 'H5': case 'H6': case 'HR':
4594                case 'IFRAME': case 'LEGEND': case 'OL': case 'PRE': case 'TABLE': case 'TD':
4595                case 'TH': case 'TR': case 'UL':
4596                    element._oldDisplayMode = 'block';
4597                    break;
4598                case 'LI':
4599                    element._oldDisplayMode = 'list-item';
4600                    break;
4601                default:
4602                    element._oldDisplayMode = 'inline';
4603            }
4604        }
4605    }
4606}
4607Sys.UI.DomElement._getWindow = function Sys$UI$DomElement$_getWindow(element) {
4608    var doc = element.ownerDocument || element.document || element;
4609    return doc.defaultView || doc.parentWindow;
4610}
4611Sys.UI.DomElement._getCurrentStyle = function Sys$UI$DomElement$_getCurrentStyle(element) {
4612    if (element.nodeType === 3) return null;
4613    var w = Sys.UI.DomElement._getWindow(element);
4614    if (element.documentElement) element = element.documentElement;
4615    var computedStyle = (w && (element !== w) && w.getComputedStyle) ?
4616        w.getComputedStyle(element, null) :
4617        element.currentStyle || element.style;
4618    if (!computedStyle && (Sys.Browser.agent === Sys.Browser.Safari) && element.style) {
4619        var oldDisplay = element.style.display;
4620        var oldPosition = element.style.position;
4621        element.style.position = 'absolute';
4622        element.style.display = 'block';
4623        var style = w.getComputedStyle(element, null);
4624        element.style.display = oldDisplay;
4625        element.style.position = oldPosition;
4626        computedStyle = {};
4627        for (var n in style) {
4628            computedStyle[n] = style[n];
4629        }
4630        computedStyle.display = 'none';
4631    }
4632    return computedStyle;
4633}
4634 
4635Sys.IContainer = function Sys$IContainer() {
4636    throw Error.notImplemented();
4637}
4638    function Sys$IContainer$addComponent(component) {
4639        /// <summary locid="M:J#Sys.IContainer.addComponent" />
4640        /// <param name="component" type="Sys.Component"></param>
4641        var e = Function._validateParams(arguments, [
4642            {name: "component", type: Sys.Component}
4643        ]);
4644        if (e) throw e;
4645        throw Error.notImplemented();
4646    }
4647    function Sys$IContainer$removeComponent(component) {
4648        /// <summary locid="M:J#Sys.IContainer.removeComponent" />
4649        /// <param name="component" type="Sys.Component"></param>
4650        var e = Function._validateParams(arguments, [
4651            {name: "component", type: Sys.Component}
4652        ]);
4653        if (e) throw e;
4654        throw Error.notImplemented();
4655    }
4656    function Sys$IContainer$findComponent(id) {
4657        /// <summary locid="M:J#Sys.IContainer.findComponent" />
4658        /// <param name="id" type="String"></param>
4659        /// <returns type="Sys.Component"></returns>
4660        var e = Function._validateParams(arguments, [
4661            {name: "id", type: String}
4662        ]);
4663        if (e) throw e;
4664        throw Error.notImplemented();
4665    }
4666    function Sys$IContainer$getComponents() {
4667        /// <summary locid="M:J#Sys.IContainer.getComponents" />
4668        /// <returns type="Array" elementType="Sys.Component"></returns>
4669        if (arguments.length !== 0) throw Error.parameterCount();
4670        throw Error.notImplemented();
4671    }
4672Sys.IContainer.prototype = {
4673    addComponent: Sys$IContainer$addComponent,
4674    removeComponent: Sys$IContainer$removeComponent,
4675    findComponent: Sys$IContainer$findComponent,
4676    getComponents: Sys$IContainer$getComponents
4677}
4678Sys.IContainer.registerInterface("Sys.IContainer");
4679 
4680Sys.ApplicationLoadEventArgs = function Sys$ApplicationLoadEventArgs(components, isPartialLoad) {
4681    /// <summary locid="M:J#Sys.ApplicationLoadEventArgs.#ctor" />
4682    /// <param name="components" type="Array" elementType="Sys.Component"></param>
4683    /// <param name="isPartialLoad" type="Boolean"></param>
4684    var e = Function._validateParams(arguments, [
4685        {name: "components", type: Array, elementType: Sys.Component},
4686        {name: "isPartialLoad", type: Boolean}
4687    ]);
4688    if (e) throw e;
4689    Sys.ApplicationLoadEventA
4689rgs.initializeBase(this);
4690    this._components = components;
4691    this._isPartialLoad = isPartialLoad;
4692}
4693 
4694    function Sys$ApplicationLoadEventArgs$get_components() {
4695        /// <value type="Array" elementType="Sys.Component" locid="P:J#Sys.ApplicationLoadEventArgs.components"></value>
4696        if (arguments.length !== 0) throw Error.parameterCount();
4697        return this._components;
4698    }
4699    function Sys$ApplicationLoadEventArgs$get_isPartialLoad() {
4700        /// <value type="Boolean" locid="P:J#Sys.ApplicationLoadEventArgs.isPartialLoad"></value>
4701        if (arguments.length !== 0) throw Error.parameterCount();
4702        return this._isPartialLoad;
4703    }
4704Sys.ApplicationLoadEventArgs.prototype = {
4705    get_components: Sys$ApplicationLoadEventArgs$get_components,
4706    get_isPartialLoad: Sys$ApplicationLoadEventArgs$get_isPartialLoad
4707}
4708Sys.ApplicationLoadEventArgs.registerClass('Sys.ApplicationLoadEventArgs', Sys.EventArgs);
4709 
4710Sys._Application = function Sys$_Application() {
4711    /// <summary locid="M:J#Sys.Application.#ctor" />
4712    if (arguments.length !== 0) throw Error.parameterCount();
4713    Sys._Application.initializeBase(this);
4714    this._disposableObjects = [];
4715    this._components = {};
4716    this._createdComponents = [];
4717    this._secondPassComponents = [];
4718    this._unloadHandlerDelegate = Function.createDelegate(this, this._unloadHandler);
4719    Sys.UI.DomEvent.addHandler(window, "unload", this._unloadHandlerDelegate);
4720    this._domReady();
4721}
4722    function Sys$_Application$get_isCreatingComponents() {
4723        /// <value type="Boolean" locid="P:J#Sys.Application.isCreatingComponents"></value>
4724        if (arguments.length !== 0) throw Error.parameterCount();
4725        return this._creatingComponents;
4726    }
4727    function Sys$_Application$get_isDisposing() {
4728        /// <value type="Boolean" locid="P:J#Sys.Application.isDisposing"></value>
4729        if (arguments.length !== 0) throw Error.parameterCount();
4730        return this._disposing;
4731    }
4732    function Sys$_Application$add_init(handler) {
4733        /// <summary locid="E:J#Sys.Application.init" />
4734        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
4735        if (e) throw e;
4736        if (this._initialized) {
4737            handler(this, Sys.EventArgs.Empty);
4738        }
4739        else {
4740            this.get_events().addHandler("init", handler);
4741        }
4742    }
4743    function Sys$_Application$remove_init(handler) {
4744        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
4745        if (e) throw e;
4746        this.get_events().removeHandler("init", handler);
4747    }
4748    function Sys$_Application$add_load(handler) {
4749        /// <summary locid="E:J#Sys.Application.load" />
4750        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
4751        if (e) throw e;
4752        this.get_events().addHandler("load", handler);
4753    }
4754    function Sys$_Application$remove_load(handler) {
4755        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
4756        if (e) throw e;
4757        this.get_events().removeHandler("load", handler);
4758    }
4759    function Sys$_Application$add_unload(handler) {
4760        /// <summary locid="E:J#Sys.Application.unload" />
4761        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
4762        if (e) throw e;
4763        this.get_events().addHandler("unload", handler);
4764    }
4765    function Sys$_Application$remove_unload(handler) {
4766        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
4767        if (e) throw e;
4768        this.get_events().removeHandler("unload", handler);
4769    }
4770    function Sys$_Application$addComponent(component) {
4771        /// <summary locid="M:J#Sys.Application.addComponent" />
4772        /// <param name="component" type="Sys.Component"></param>
4773        var e = Function._validateParams(arguments, [
4774            {name: "component", type: Sys.Component}
4775        ]);
4776        if (e) throw e;
4777        var id = component.get_id();
4778        if (!id) throw Error.invalidOperation(Sys.Res.cantAddWithoutId);
4779        if (typeof(this._components[id]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.appDuplicateComponent, id));
4780        this._components[id] = component;
4781    }
4782    function Sys$_Application$beginCreateComponents() {
4783        /// <summary locid="M:J#Sys.Application.beginCreateComponents" />
4784        if (arguments.length !== 0) throw Error.parameterCount();
4785        this._creatingComponents = true;
4786    }
4787    function Sys$_Application$dispose() {
4788        /// <summary locid="M:J#Sys.Application.dispose" />
4789        if (arguments.length !== 0) throw Error.parameterCount();
4790        if (!this._disposing) {
4791            this._disposing = true;
4792            if (this._timerCookie) {
4793                window.clearTimeout(this._timerCookie);
4794                delete this._timerCookie;
4795            }
4796            if (this._endRequestHandler) {
4797                Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);
4798                delete this._endRequestHandler;
4799            }
4800            if (this._beginRequestHandler) {
4801                Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);
4802                delete this._beginRequestHandler;
4803            }
4804            if (window.pageUnload) {
4805                window.pageUnload(this, Sys.EventArgs.Empty);
4806            }
4807            var unloadHandler = this.get_events().getHandler("unload");
4808            if (unloadHandler) {
4809                unloadHandler(this, Sys.EventArgs.Empty);
4810            }
4811            var disposableObjects = Array.clone(this._disposableObjects);
4812            for (var i = 0, l = disposableObjects.length; i < l; i++) {
4813                var object = disposableObjects[i];
4814                if (typeof(object) !== "undefined") {
4815                    object.dispose();
4816                }
4817            }
4818            Array.clear(this._disposableObjects);
4819            Sys.UI.DomEvent.removeHandler(window, "unload", this._unloadHandlerDelegate);
4820            if (Sys._ScriptLoader) {
4821                var sl = Sys._ScriptLoader.getInstance();
4822                if(sl) {
4823                    sl.dispose();
4824                }
4825            }
4826            Sys._Application.callBaseMethod(this, 'dispose');
4827        }
4828    }
4829    function Sys$_Application$disposeElement(element, childNodesOnly) {
4830        /// <summary locid="M:J#Sys._Application.disposeElement" />
4831        /// <param name="element"></param>
4832        /// <param name="childNodesOnly" type="Boolean"></param>
4833        var e = Function._validateParams(arguments, [
4834            {name: "element"},
4835            {name: "childNodesOnly", type: Boolean}
4836        ]);
4837        if (e) throw e;
4838        if (element.nodeType === 1) {
4839            var i, allElements = element.getElementsByTagName("*"),
4840                length = allElements.length,
4841                children = new Array(length);
4842            for (i = 0; i < length; i++) {
4843                children[i] = allElements[i];
4844            }
4845            for (i = length - 1; i >= 0; i--) {
4846                var child = children[i];
4847                var d = child.dispose;
4848                if (d && typeof(d) === "function") {
4849                    child.dispose();
4850                }
4851                else {
4852                    var c = child.control;
4853                    if (c && typeof(c.dispose) === "function") {
4854                        c.dispose();
4855                    }
4856                }
4857                var list = child._behaviors;
4858                if (list) {
4859                    this._disposeComponents(list);
4860                }
4861                list = child._components;
4862                if (list) {
4863                    this._disposeComponents(list);
4864                    child._components = null;
4865                }
4866            }
4867            if (!childNodesOnly) {
4868                var d = element.dispose;
4869                if (d && typeof(d) === "function") {
4870                    element.dispose();
4871                }
4872                else {
4873                    var c = element.control;
4874                    if (c && typeof(c.dispose) === "function") {
4875                        c.dispose();
4876                    }
4877                }
4878                var list = element._behaviors;
4879                if (list) {
4880                    this._disposeComponents(list);
4881                }
4882                list = element._components;
4883                if (list) {
4884                    this._disposeComponents(list);
4885                    element._components = null;
4886                }
4887            }
4888        }
4889    }
4890    function Sys$_Application$endCreateComponents() {
4891        /// <summary locid="M:J#Sys.Application.endCreateComponents" />
4892        if (arguments.length !== 0) throw Error.parameterCount();
4893        var components = this._secondPassComponents;
4894        for (var i = 0, l = components.length; i < l; i++) {
4895            var component = components[i].component;
4896            Sys$Component$_setReferences(component, components[i].references);
4897            component.endUpdate();
4898        }
4899        this._secondPassComponents = [];
4900        this._creatingComponents = false;
4901    }
4902    function Sys$_Application$findComponent(id, parent) {
4903        /// <summary locid="M:J#Sys.Application.findComponent" />
4904        /// <param name="id" type="String"></param>
4905        /// <param name="parent" optional="true" mayBeNull="true"></param>
4906        /// <returns type="Sys.Component" mayBeNull="true"></returns>
4907        var e = Function._validateParams(arguments, [
4908            {name: "id", type: String},
4909            {name: "parent", mayBeNull: true, optional: true}
4910        ]);
4911        if (e) throw e;
4912        return (parent ?
4913            ((Sys.IContainer.isInstanceOfType(parent)) ?
4914                parent.findComponent(id) :
4915                parent[id] || null) :
4916            Sys.Application._components[id] || null);
4917    }
4918    function Sys$_Application$getComponents() {
4919        /// <summary locid="M:J#Sys.Application.getComponents" />
4920        /// <returns type="Array" elementType="Sys.Component"></returns>
4921        if (arguments.length !== 0) throw Error.parameterCount();
4922        var res = [];
4923        var components = this._components;
4924        for (var name in components) {
4925            res[res.length] = components[name];
4926        }
4927        return res;
4928    }
4929    function Sys$_Application$initialize() {
4930        /// <summary locid="M:J#Sys.Application.initialize" />
4931        if (arguments.length !== 0) throw Error.parameterCount();
4932        if(!this.get_isInitialized() && !this._disposing) {
4933            Sys._Application.callBaseMethod(this, 'initialize');
4934            this._raiseInit();
4935            if (this.get_stateString) {
4936                if (Sys.WebForms && Sys.WebForms.PageRequestManager) {
4937                    this._beginRequestHandler = Function.createDelegate(this, this._onPageRequestManagerBeginRequest);
4938                    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);
4939                    this._endRequestHandler = Function.createDelegate(this, this._onPageRequestManagerEndRequest);
4940                    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler);
4941                }
4942                var loadedEntry = this.get_stateString();
4943                if (loadedEntry !== this._currentEntry) {
4944                    this._navigate(loadedEntry);
4945                }
4946                else {
4947                    this._ensureHistory();
4948                }
4949            }
4950            this.raiseLoad();
4951        }
4952    }
4953    function Sys$_Application$notifyScriptLoaded() {
4954        /// <summary locid="M:J#Sys.Application.notifyScriptLoaded" />
4955        if (arguments.length !== 0) throw Error.parameterCount();
4956    }
4957    function Sys$_Application$registerDisposableObject(object) {
4958        /// <summary locid="M:J#Sys.Application.registerDisposableObject" />
4959        /// <param name="object" type="Sys.IDisposable"></param>
4960        var e = Function._validateParams(arguments, [
4961            {name: "object", type: Sys.IDisposable}
4962        ]);
4963        if (e) throw e;
4964        if (!this._disposing) {
4965            var objects = this._disposableObjects,
4966                i = objects.length;
4967            objects[i] = object;
4968            object.__msdisposeindex = i;
4969        }
4970    }
4971    function Sys$_Application$raiseLoad() {
4972        /// <summary locid="M:J#Sys.Application.raiseLoad" />
4973        if (arguments.length !== 0) throw Error.parameterCount();
4974        var h = this.get_events().getHandler("load");
4975        var args = new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents), !!this._loaded);
4976        this._loaded = true;
4977        if (h) {
4978            h(this, args);
4979        }
4980        if (window.pageLoad) {
4981            window.pageLoad(this, args);
4982        }
4983        this._createdComponents = [];
4984    }
4985    function Sys$_Application$removeComponent(component) {
4986        /// <summary locid="M:J#Sys.Application.removeComponent" />
4987        /// <param name="component" type="Sys.Component"></param>
4988        var e = Function._validateParams(arguments, [
4989            {name: "component", type: Sys.Component}
4990        ]);
4991        if (e) throw e;
4992        var id = component.get_id();
4993        if (id) delete this._components[id];
4994    }
4995    function Sys$_Application$unregisterDisposableObject(object) {
4996        /// <summary locid="M:J#Sys.Application.unregisterDisposableObject" />
4997        /// <param name="object" type="Sys.IDisposable"></param>
4998        var e = Function._validateParams(arguments, [
4999            {name: "object", type: Sys.IDisposable}
5000        ]);
5001        if (e) throw e;
5002        if (!this._disposing) {
5003            var i = object.__msdisposeindex;
5004            if (typeof(i) === "number") {
5005                var disposableObjects = this._disposableObjects;
5006                delete disposableObjects[i];
5007                delete object.__msdisposeindex;
5008                if (++this._deleteCount > 1000) {
5009                    var newArray = [];
5010                    for (var j = 0, l = disposableObjects.length; j < l; j++) {
5011                        object = disposableObjects[j];
5012                        if (typeof(object) !== "undefined") {
5013                            object.__msdisposeindex = newArray.length;
5014                            newArray.push(object);
5015                        }
5016                    }
5017                    this._disposableObjects = newArray;
5018                    this._deleteCount = 0;
5019                }
5020            }
5021        }
5022    }
5023    function Sys$_Application$_addComponentToSecondPass(component, references) {
5024        this._secondPassComponents[this._secondPassComponents.length] = {component: component, references: references};
5025    }
5026    function Sys$_Application$_disposeComponents(list) {
5027        if (list) {
5028            for (var i = list.length - 1; i >= 0; i--) {
5029                var item = list[i];
5030                if (typeof(item.dispose) === "function") {
5031                    item.dispose();
5032                }
5033            }
5034        }
5035    }
5036    function Sys$_Application$_domReady() {
5037        var check, er, app = this;
5038        function init() { app.initialize(); }
5039        var onload = function() {
5040            Sys.UI.DomEvent.removeHandler(window, "load", onload);
5041            init();
5042        }
5043        Sys.UI.DomEvent.addHandler(window, "load", onload);
5044        
5045        if (document.addEventListener) {
5046            try {
5047                document.addEventListener("DOMContentLoaded", check = function() {
5048                    document.removeEventListener("DOMContentLoaded", check, false);
5049                    init();
5050                }, false);
5051            }
5052            catch (er) { }
5053        }
5054        else if (document.attachEvent) {
5055            if ((window == window.top) && document.documentElement.doScroll) {
5056                var timeout, el = document.createElement("div");
5057                check = function() {
5058                    try {
5059                        el.doScroll("left");
5060                    }
5061                    catch (er) {
5062                        timeout = window.setTimeout(check, 0);
5063                        return;
5064                    }
5065                    el = null;
5066                    init();
5067                }
5068                check();
5069            }
5070            else {
5071		document.attachEvent("onreadystatechange", check = function() {
5072                    if (document.readyState === "complete") {
5073                        document.detachEvent("onreadystatechange", check);
5074                        init();
5075                    }
5076                });
5077            }
5078        }
5079    }
5080    function Sys$_Application$_raiseInit() {
5081        var handler = this.get_events().getHandler("init");
5082        if (handler) {
5083            this.beginCreateComponents();
5084            handler(this, Sys.EventArgs.Empty);
5085            this.endCreateComponents();
5086        }
5087    }
5088    function Sys$_Application$_unloadHandler(event) {
5089        this.dispose();
5090    }
5091Sys._Application.prototype = {
5092    _creatingComponents: false,
5093    _disposing: false,
5094    _deleteCount: 0,
5095    get_isCreatingComponents: Sys$_Application$get_isCreatingComponents,
5096    get_isDisposing: Sys$_Application$get_isDisposing,
5097    add_init: Sys$_Application$add_init,
5098    remove_init: Sys$_Application$remove_init,
5099    add_load: Sys$_Application$add_load,
5100    remove_load: Sys$_Application$remove_load,
5101    add_unload: Sys$_Application$add_unload,
5102    remove_unload: Sys$_Application$remove_unload,
5103    addComponent: Sys$_Application$addComponent,
5104    beginCreateComponents: Sys$_Application$beginCreateComponents,
5105    dispose: Sys$_Application$dispose,
5106    disposeElement: Sys$_Application$disposeElement,
5107    endCreateComponents: Sys$_Application$endCreateComponents,
5108    findComponent: Sys$_Application$findComponent,
5109    getComponents: Sys$_Application$getComponents,
5110    initialize: Sys$_Application$initialize,
5111    notifyScriptLoaded: Sys$_Application$notifyScriptLoaded,
5112    registerDisposableObject: Sys$_Application$registerDisposableObject,
5113    raiseLoad: Sys$_Application$raiseLoad,
5114    removeComponent: Sys$_Application$removeComponent,
5115    unregisterDisposableObject: Sys$_Application$unregisterDisposableObject,
5116    _addComponentToSecondPass: Sys$_Application$_addComponentToSecondPass,
5117    _disposeComponents: Sys$_Application$_disposeComponents,
5118    _domReady: Sys$_Application$_domReady,
5119    _raiseInit: Sys$_Application$_raiseInit,
5120    _unloadHandler: Sys$_Application$_unloadHandler
5121}
5122Sys._Application.registerClass('Sys._Application', Sys.Component, Sys.IContainer);
5123Sys.Application = new Sys._Application();
5124var $find = Sys.Application.findComponent;
5125 
5126Sys.UI.Behavior = function Sys$UI$Behavior(element) {
5127    /// <summary locid="M:J#Sys.UI.Behavior.#ctor" />
5128    /// <param name="element" domElement="true"></param>
5129    var e = Function._validateParams(arguments, [
5130        {name: "element", domElement: true}
5131    ]);
5132    if (e) throw e;
5133    Sys.UI.Behavior.initializeBase(this);
5134    this._element = element;
5135    var behaviors = element._behaviors;
5136    if (!behaviors) {
5137        element._behaviors = [this];
5138    }
5139    else {
5140        behaviors[behaviors.length] = this;
5141    }
5142}
5143    function Sys$UI$Behavior$get_element() {
5144        /// <value domElement="true" locid="P:J#Sys.UI.Behavior.element"></value>
5145        if (arguments.length !== 0) throw Error.parameterCount();
5146        return this._element;
5147    }
5148    function Sys$UI$Behavior$get_id() {
5149        /// <value type="String" locid="P:J#Sys.UI.Behavior.id"></value>
5150        if (arguments.length !== 0) throw Error.parameterCount();
5151        var baseId = Sys.UI.Behavior.callBaseMethod(this, 'get_id');
5152        if (baseId) return baseId;
5153        if (!this._element || !this._element.id) return '';
5154        return this._element.id + '$' + this.get_name();
5155    }
5156    function Sys$UI$Behavior$get_name() {
5157        /// <value type="String" locid="P:J#Sys.UI.Behavior.name"></value>
5158        if (arguments.length !== 0) throw Error.parameterCount();
5159        if (this._name) return this._name;
5160        var name = Object.getTypeName(this);
5161        var i = name.lastIndexOf('.');
5162        if (i !== -1) name = name.substr(i + 1);
5163        if (!this.get_isInitialized()) this._name = name;
5164        return name;
5165    }
5166    function Sys$UI$Behavior$set_name(value) {
5167        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
5168        if (e) throw e;
5169        if ((value === '') || (value.charAt(0) === ' ') || (value.charAt(value.length - 1) === ' '))
5170            throw Error.argument('value', Sys.Res.invalidId);
5171        if (typeof(this._element[value]) !== 'undefined')
5172            throw Error.invalidOperation(String.format(Sys.Res.behaviorDuplicateName, value));
5173        if (this.get_isInitialized()) throw Error.invalidOperation(Sys.Res.cantSetNameAfterInit);
5174        this._name = value;
5175    }
5176    function Sys$UI$Behavior$initialize() {
5177        Sys.UI.Behavior.callBaseMethod(this, 'initialize');
5178        var name = this.get_name();
5179        if (name) this._element[name] = this;
5180    }
5181    function Sys$UI$Behavior$dispose() {
5182        Sys.UI.Behavior.callBaseMethod(this, 'dispose');
5183        var e = this._element;
5184        if (e) {
5185            var name = this.get_name();
5186            if (name) {
5187                e[name] = null;
5188            }
5189            var behaviors = e._behaviors;
5190            Array.remove(behaviors, this);
5191            if (behaviors.length === 0) {
5192                e._behaviors = null;
5193            }
5194            delete this._element;
5195        }
5196    }
5197Sys.UI.Behavior.prototype = {
5198    _name: null,
5199    get_element: Sys$UI$Behavior$get_element,
5200    get_id: Sys$UI$Behavior$get_id,
5201    get_name: Sys$UI$Behavior$get_name,
5202    set_name: Sys$UI$Behavior$set_name,
5203    initialize: Sys$UI$Behavior$initialize,
5204    dispose: Sys$UI$Behavior$dispose
5205}
5206Sys.UI.Behavior.registerClass('Sys.UI.Behavior', Sys.Component);
5207Sys.UI.Behavior.getBehaviorByName = function Sys$UI$Behavior$getBehaviorByName(element, name) {
5208    /// <summary locid="M:J#Sys.UI.Behavior.getBehaviorByName" />
5209    /// <param name="element" domElement="true"></param>
5210    /// <param name="name" type="String"></param>
5211    /// <returns type="Sys.UI.Behavior" mayBeNull="true"></returns>
5212    var e = Function._validateParams(arguments, [
5213        {name: "element", domElement: true},
5214        {name: "name", type: String}
5215    ]);
5216    if (e) throw e;
5217    var b = element[name];
5218    return (b && Sys.UI.Behavior.isInstanceOfType(b)) ? b : null;
5219}
5220Sys.UI.Behavior.getBehaviors = function Sys$UI$Behavior$getBehaviors(element) {
5221    /// <summary locid="M:J#Sys.UI.Behavior.getBehaviors" />
5222    /// <param name="element" domElement="true"></param>
5223    /// <returns type="Array" elementType="Sys.UI.Behavior"></returns>
5224    var e = Function._validateParams(arguments, [
5225        {name: "element", domElement: true}
5226    ]);
5227    if (e) throw e;
5228    if (!element._behaviors) return [];
5229    return Array.clone(element._behaviors);
5230}
5231Sys.UI.Behavior.getBehaviorsByType = function Sys$UI$Behavior$getBehaviorsByType(element, type) {
5232    /// <summary locid="M:J#Sys.UI.Behavior.getBehaviorsByType" />
5233    /// <param name="element" domElement="true"></param>
5234    /// <param name="type" type="Type"></param>
5235    /// <returns type="Array" elementType="Sys.UI.Behavior"></returns>
5236    var e = Function._validateParams(arguments, [
5237        {name: "element", domElement: true},
5238        {name: "type", type: Type}
5239    ]);
5240    if (e) throw e;
5241    var behaviors = element._behaviors;
5242    var results = [];
5243    if (behaviors) {
5244        for (var i = 0, l = behaviors.length; i < l; i++) {
5245            if (type.isInstanceOfType(behaviors[i])) {
5246                results[results.length] = behaviors[i];
5247            }
5248        }
5249    }
5250    return results;
5251}
5252 
5253Sys.UI.VisibilityMode = function Sys$UI$VisibilityMode() {
5254    /// <summary locid="M:J#Sys.UI.VisibilityMode.#ctor" />
5255    /// <field name="hide" type="Number" integer="true" static="true" locid="F:J#Sys.UI.VisibilityMode.hide"></field>
5256    /// <field name="collapse" type="Number" integer="true" static="true" locid="F:J#Sys.UI.VisibilityMode.collapse"></field>
5257    if (arguments.length !== 0) throw Error.parameterCount();
5258    throw Error.notImplemented();
5259}
5260Sys.UI.VisibilityMode.prototype = {
5261    hide: 0,
5262    collapse: 1
5263}
5264Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode");
5265 
5266Sys.UI.Control = function Sys$UI$Control(element) {
5267    /// <summary locid="M:J#Sys.UI.Control.#ctor" />
5268    /// <param name="element" domElement="true"></param>
5269    var e = Function._validateParams(arguments, [
5270        {name: "element", domElement: true}
5271    ]);
5272    if (e) throw e;
5273    if (element.control !== null && typeof(element.control) !== 'undefined') throw Error.invali
5273dOperation(Sys.Res.controlAlreadyDefined);
5274    Sys.UI.Control.initializeBase(this);
5275    this._element = element;
5276    element.control = this;
5277    var role = this.get_role();
5278    if (role) {
5279        element.setAttribute("role", role);
5280    }
5281}
5282    function Sys$UI$Control$get_element() {
5283        /// <value domElement="true" locid="P:J#Sys.UI.Control.element"></value>
5284        if (arguments.length !== 0) throw Error.parameterCount();
5285        return this._element;
5286    }
5287    function Sys$UI$Control$get_id() {
5288        /// <value type="String" locid="P:J#Sys.UI.Control.id"></value>
5289        if (arguments.length !== 0) throw Error.parameterCount();
5290        if (!this._element) return '';
5291        return this._element.id;
5292    }
5293    function Sys$UI$Control$set_id(value) {
5294        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
5295        if (e) throw e;
5296        throw Error.invalidOperation(Sys.Res.cantSetId);
5297    }
5298    function Sys$UI$Control$get_parent() {
5299        /// <value type="Sys.UI.Control" locid="P:J#Sys.UI.Control.parent"></value>
5300        if (arguments.length !== 0) throw Error.parameterCount();
5301        if (this._parent) return this._parent;
5302        if (!this._element) return null;
5303        
5304        var parentElement = this._element.parentNode;
5305        while (parentElement) {
5306            if (parentElement.control) {
5307                return parentElement.control;
5308            }
5309            parentElement = parentElement.parentNode;
5310        }
5311        return null;
5312    }
5313    function Sys$UI$Control$set_parent(value) {
5314        var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.Control}]);
5315        if (e) throw e;
5316        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5317        var parents = [this];
5318        var current = value;
5319        while (current) {
5320            if (Array.contains(parents, current)) throw Error.invalidOperation(Sys.Res.circularParentChain);
5321            parents[parents.length] = current;
5322            current = current.get_parent();
5323        }
5324        this._parent = value;
5325    }
5326    function Sys$UI$Control$get_role() {
5327        /// <value type="String" locid="P:J#Sys.UI.Control.role"></value>
5328        if (arguments.length !== 0) throw Error.parameterCount();
5329        return null;
5330    }
5331    function Sys$UI$Control$get_visibilityMode() {
5332        /// <value type="Sys.UI.VisibilityMode" locid="P:J#Sys.UI.Control.visibilityMode"></value>
5333        if (arguments.length !== 0) throw Error.parameterCount();
5334        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5335        return Sys.UI.DomElement.getVisibilityMode(this._element);
5336    }
5337    function Sys$UI$Control$set_visibilityMode(value) {
5338        var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.VisibilityMode}]);
5339        if (e) throw e;
5340        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5341        Sys.UI.DomElement.setVisibilityMode(this._element, value);
5342    }
5343    function Sys$UI$Control$get_visible() {
5344        /// <value type="Boolean" locid="P:J#Sys.UI.Control.visible"></value>
5345        if (arguments.length !== 0) throw Error.parameterCount();
5346        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5347        return Sys.UI.DomElement.getVisible(this._element);
5348    }
5349    function Sys$UI$Control$set_visible(value) {
5350        var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]);
5351        if (e) throw e;
5352        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5353        Sys.UI.DomElement.setVisible(this._element, value)
5354    }
5355    function Sys$UI$Control$addCssClass(className) {
5356        /// <summary locid="M:J#Sys.UI.Control.addCssClass" />
5357        /// <param name="className" type="String"></param>
5358        var e = Function._validateParams(arguments, [
5359            {name: "className", type: String}
5360        ]);
5361        if (e) throw e;
5362        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5363        Sys.UI.DomElement.addCssClass(this._element, className);
5364    }
5365    function Sys$UI$Control$dispose() {
5366        Sys.UI.Control.callBaseMethod(this, 'dispose');
5367        if (this._element) {
5368            this._element.control = null;
5369            delete this._element;
5370        }
5371        if (this._parent) delete this._parent;
5372    }
5373    function Sys$UI$Control$onBubbleEvent(source, args) {
5374        /// <summary locid="M:J#Sys.UI.Control.onBubbleEvent" />
5375        /// <param name="source"></param>
5376        /// <param name="args" type="Sys.EventArgs"></param>
5377        /// <returns type="Boolean"></returns>
5378        var e = Function._validateParams(arguments, [
5379            {name: "source"},
5380            {name: "args", type: Sys.EventArgs}
5381        ]);
5382        if (e) throw e;
5383        return false;
5384    }
5385    function Sys$UI$Control$raiseBubbleEvent(source, args) {
5386        /// <summary locid="M:J#Sys.UI.Control.raiseBubbleEvent" />
5387        /// <param name="source"></param>
5388        /// <param name="args" type="Sys.EventArgs"></param>
5389        var e = Function._validateParams(arguments, [
5390            {name: "source"},
5391            {name: "args", type: Sys.EventArgs}
5392        ]);
5393        if (e) throw e;
5394        this._raiseBubbleEvent(source, args);
5395    }
5396    function Sys$UI$Control$_raiseBubbleEvent(source, args) {
5397        var currentTarget = this.get_parent();
5398        while (currentTarget) {
5399            if (currentTarget.onBubbleEvent(source, args)) {
5400                return;
5401            }
5402            currentTarget = currentTarget.get_parent();
5403        }
5404    }
5405    function Sys$UI$Control$removeCssClass(className) {
5406        /// <summary locid="M:J#Sys.UI.Control.removeCssClass" />
5407        /// <param name="className" type="String"></param>
5408        var e = Function._validateParams(arguments, [
5409            {name: "className", type: String}
5410        ]);
5411        if (e) throw e;
5412        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5413        Sys.UI.DomElement.removeCssClass(this._element, className);
5414    }
5415    function Sys$UI$Control$toggleCssClass(className) {
5416        /// <summary locid="M:J#Sys.UI.Control.toggleCssClass" />
5417        /// <param name="className" type="String"></param>
5418        var e = Function._validateParams(arguments, [
5419            {name: "className", type: String}
5420        ]);
5421        if (e) throw e;
5422        if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose);
5423        Sys.UI.DomElement.toggleCssClass(this._element, className);
5424    }
5425Sys.UI.Control.prototype = {
5426    _parent: null,
5427    _visibilityMode: Sys.UI.VisibilityMode.hide,
5428    get_element: Sys$UI$Control$get_element,
5429    get_id: Sys$UI$Control$get_id,
5430    set_id: Sys$UI$Control$set_id,
5431    get_parent: Sys$UI$Control$get_parent,
5432    set_parent: Sys$UI$Control$set_parent,
5433    get_role: Sys$UI$Control$get_role,
5434    get_visibilityMode: Sys$UI$Control$get_visibilityMode,
5435    set_visibilityMode: Sys$UI$Control$set_visibilityMode,
5436    get_visible: Sys$UI$Control$get_visible,
5437    set_visible: Sys$UI$Control$set_visible,
5438    addCssClass: Sys$UI$Control$addCssClass,
5439    dispose: Sys$UI$Control$dispose,
5440    onBubbleEvent: Sys$UI$Control$onBubbleEvent,
5441    raiseBubbleEvent: Sys$UI$Control$raiseBubbleEvent,
5442    _raiseBubbleEvent: Sys$UI$Control$_raiseBubbleEvent,
5443    removeCssClass: Sys$UI$Control$removeCssClass,
5444    toggleCssClass: Sys$UI$Control$toggleCssClass
5445}
5446Sys.UI.Control.registerClass('Sys.UI.Control', Sys.Component);
5447Sys.HistoryEventArgs = function Sys$HistoryEventArgs(state) {
5448    /// <summary locid="M:J#Sys.HistoryEventArgs.#ctor" />
5449    /// <param name="state" type="Object"></param>
5450    var e = Function._validateParams(arguments, [
5451        {name: "state", type: Object}
5452    ]);
5453    if (e) throw e;
5454    Sys.HistoryEventArgs.initializeBase(this);
5455    this._state = state;
5456}
5457    function Sys$HistoryEventArgs$get_state() {
5458        /// <value type="Object" locid="P:J#Sys.HistoryEventArgs.state"></value>
5459        if (arguments.length !== 0) throw Error.parameterCount();
5460        return this._state;
5461    }
5462Sys.HistoryEventArgs.prototype = {
5463    get_state: Sys$HistoryEventArgs$get_state
5464}
5465Sys.HistoryEventArgs.registerClass('Sys.HistoryEventArgs', Sys.EventArgs);
5466Sys.Application._appLoadHandler = null;
5467Sys.Application._beginRequestHandler = null;
5468Sys.Application._clientId = null;
5469Sys.Application._currentEntry = '';
5470Sys.Application._endRequestHandler = null;
5471Sys.Application._history = null;
5472Sys.Application._enableHistory = false;
5473Sys.Application._historyEnabledInScriptManager = false;
5474Sys.Application._historyFrame = null;
5475Sys.Application._historyInitialized = false;
5476Sys.Application._historyPointIsNew = false;
5477Sys.Application._ignoreTimer = false;
5478Sys.Application._initialState = null;
5479Sys.Application._state = {};
5480Sys.Application._timerCookie = 0;
5481Sys.Application._timerHandler = null;
5482Sys.Application._uniqueId = null;
5483Sys._Application.prototype.get_stateString = function Sys$_Application$get_stateString() {
5484    /// <summary locid="M:J#Sys._Application.get_stateString" />
5485    if (arguments.length !== 0) throw Error.parameterCount();
5486    var hash = null;
5487    
5488    if (Sys.Browser.agent === Sys.Browser.Firefox) {
5489        var href = window.location.href;
5490        var hashIndex = href.indexOf('#');
5491        if (hashIndex !== -1) {
5492            hash = href.substring(hashIndex + 1);
5493        }
5494        else {
5495            hash = "";
5496        }
5497        return hash;
5498    }
5499    else {
5500        hash = window.location.hash;
5501    }
5502    
5503    if ((hash.length > 0) && (hash.charAt(0) === '#')) {
5504        hash = hash.substring(1);
5505    }
5506    return hash;
5507};
5508Sys._Application.prototype.get_enableHistory = function Sys$_Application$get_enableHistory() {
5509    /// <summary locid="M:J#Sys._Application.get_enableHistory" />
5510    if (arguments.length !== 0) throw Error.parameterCount();
5511    return this._enableHistory;
5512};
5513Sys._Application.prototype.set_enableHistory = function Sys$_Application$set_enableHistory(value) {
5514    if (this._initialized && !this._initializing) {
5515        throw Error.invalidOperation(Sys.Res.historyCannotEnableHistory);
5516    }
5517    else if (this._historyEnabledInScriptManager && !value) {
5518        throw Error.invalidOperation(Sys.Res.invalidHistorySettingCombination);
5519    }
5520    this._enableHistory = value;
5521};
5522Sys._Application.prototype.add_navigate = function Sys$_Application$add_navigate(handler) {
5523    /// <summary locid="E:J#Sys.Application.navigate" />
5524    /// <param name="handler" type="Function"></param>
5525    var e = Function._validateParams(arguments, [
5526        {name: "handler", type: Function}
5527    ]);
5528    if (e) throw e;
5529    this.get_events().addHandler("navigate", handler);
5530};
5531Sys._Application.prototype.remove_navigate = function Sys$_Application$remove_navigate(handler) {
5532    /// <summary locid="M:J#Sys._Application.remove_navigate" />
5533    /// <param name="handler" type="Function"></param>
5534    var e = Function._validateParams(arguments, [
5535        {name: "handler", type: Function}
5536    ]);
5537    if (e) throw e;
5538    this.get_events().removeHandler("navigate", handler);
5539};
5540Sys._Application.prototype.addHistoryPoint = function Sys$_Application$addHistoryPoint(state, title) {
5541    /// <summary locid="M:J#Sys.Application.addHistoryPoint" />
5542    /// <param name="state" type="Object"></param>
5543    /// <param name="title" type="String" optional="true" mayBeNull="true"></param>
5544    var e = Function._validateParams(arguments, [
5545        {name: "state", type: Object},
5546        {name: "title", type: String, mayBeNull: true, optional: true}
5547    ]);
5548    if (e) throw e;
5549    if (!this._enableHistory) throw Error.invalidOperation(Sys.Res.historyCannotAddHistoryPointWithHistoryDisabled);
5550    for (var n in state) {
5551        var v = state[n];
5552        var t = typeof(v);
5553        if ((v !== null) && ((t === 'object') || (t === 'function') || (t === 'undefined'))) {
5554            throw Error.argument('state', Sys.Res.stateMustBeStringDictionary);
5555        }
5556    }
5557    this._ensureHistory();
5558    var initialState = this._state;
5559    for (var key in state) {
5560        var value = state[key];
5561        if (value === null) {
5562            if (typeof(initialState[key]) !== 'undefined') {
5563                delete initialState[key];
5564            }
5565        }
5566        else {
5567            initialState[key] = value;
5568        }
5569    }
5570    var entry = this._serializeState(initialState);
5571    this._historyPointIsNew = true;
5572    this._setState(entry, title);
5573    this._raiseNavigate();
5574};
5575Sys._Application.prototype.setServerId = function Sys$_Application$setServerId(clientId, uniqueId) {
5576    /// <summary locid="M:J#Sys.Application.setServerId" />
5577    /// <param name="clientId" type="String"></param>
5578    /// <param name="uniqueId" type="String"></param>
5579    var e = Function._validateParams(arguments, [
5580        {name: "clientId", type: String},
5581        {name: "uniqueId", type: String}
5582    ]);
5583    if (e) throw e;
5584    this._clientId = clientId;
5585    this._uniqueId = uniqueId;
5586};
5587Sys._Application.prototype.setServerState = function Sys$_Application$setServerState(value) {
5588    /// <summary locid="M:J#Sys.Application.setServerState" />
5589    /// <param name="value" type="String"></param>
5590    var e = Function._validateParams(arguments, [
5591        {name: "value", type: String}
5592    ]);
5593    if (e) throw e;
5594    this._ensureHistory();
5595    this._state.__s = value;
5596    this._updateHiddenField(value);
5597};
5598Sys._Application.prototype._deserializeState = function Sys$_Application$_deserializeState(entry) {
5599    var result = {};
5600    entry = entry || '';
5601    var serverSeparator = entry.indexOf('&&');
5602    if ((serverSeparator !== -1) && (serverSeparator + 2 < entry.length)) {
5603        result.__s = entry.substr(serverSeparator + 2);
5604        entry = entry.substr(0, serverSeparator);
5605    }
5606    var tokens = entry.split('&');
5607    for (var i = 0, l = tokens.length; i < l; i++) {
5608        var token = tokens[i];
5609        var equal = token.indexOf('=');
5610        if ((equal !== -1) && (equal + 1 < token.length)) {
5611            var name = token.substr(0, equal);
5612            var value = token.substr(equal + 1);
5613            result[name] = decodeURIComponent(value);
5614        }
5615    }
5616    return result;
5617};
5618Sys._Application.prototype._enableHistoryInScriptManager = function Sys$_Application$_enableHistoryInScriptManager() {
5619    this._enableHistory = true;
5620    this._historyEnabledInScriptManager = true;
5621};
5622Sys._Application.prototype._ensureHistory = function Sys$_Application$_ensureHistory() {
5623    if (!this._historyInitialized && this._enableHistory) {
5624        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && 
5625            ((!document.documentMode) || document.documentMode < 8)) {
5626            this._historyFrame = document.getElementById('__historyFrame');
5627            if (!this._historyFrame) throw Error.invalidOperation(Sys.Res.historyMissingFrame);
5628            this._ignoreIFrame = true;
5629        }
5630        this._timerHandler = Function.createDelegate(this, this._onIdle);
5631        this._timerCookie = window.setTimeout(this._timerHandler, 100);
5632        
5633        try {
5634            this._initialState = this._deserializeState(this.get_stateString());
5635        } catch(e) {}
5636        
5637        this._historyInitialized = true;
5638    }
5639};
5640Sys._Application.prototype._navigate = function Sys$_Application$_navigate(entry) {
5641    this._ensureHistory();
5642    var state = this._deserializeState(entry);
5643    
5644    if (this._uniqueId) {
5645        var oldServerEntry = this._state.__s || '';
5646        var newServerEntry = state.__s || '';
5647        if (newServerEntry !== oldServerEntry) {
5648            this._updateHiddenField(newServerEntry);
5649            __doPostBack(this._uniqueId, newServerEntry);
5650            this._state = state;
5651            return;
5652        }
5653    }
5654    this._setState(entry);
5655    this._state = state;
5656    this._raiseNavigate();
5657};
5658Sys._Application.prototype._onIdle = function Sys$_Application$_onIdle() {
5659    delete this._timerCookie;
5660    
5661    var entry = this.get_stateString();
5662    if (entry !== this._currentEntry) {
5663        if (!this._ignoreTimer) {
5664            this._historyPointIsNew = false;
5665            this._navigate(entry);
5666        }
5667    }
5668    else {
5669        this._ignoreTimer = false;
5670    }
5671    this._timerCookie = window.setTimeout(this._timerHandler, 100);
5672};
5673Sys._Application.prototype._onIFrameLoad = function Sys$_Application$_onIFrameLoad(entry) {
5674    if ((!document.documentMode) || document.documentMode < 8 ) {
5675        this._ensureHistory();
5676        if (!this._ignoreIFrame) {
5677            this._historyPointIsNew = false;
5678            this._navigate(entry);
5679        }
5680        this._ignoreIFrame = false;
5681    }
5682};
5683Sys._Application.prototype._onPageRequestManagerBeginRequest = function Sys$_Application$_onPageRequestManagerBeginRequest(sender, args) {
5684    this._ignoreTimer = true;
5685    this._originalTitle = document.title;
5686};
5687Sys._Application.prototype._onPageRequestManagerEndRequest = function Sys$_Application$_onPageRequestManagerEndRequest(sender, args) {
5688    var dataItem = args.get_dataItems()[this._clientId];
5689    var originalTitle = this._originalTitle;
5690    this._originalTitle = null;
5691    var eventTarget = document.getElementById("__EVENTTARGET");
5692    if (eventTarget && eventTarget.value === this._uniqueId) {
5693        eventTarget.value = '';
5694    }
5695    if (typeof(dataItem) !== 'undefined') {
5696        this.setServerState(dataItem);
5697        this._historyPointIsNew = true;
5698    }
5699    else {
5700        this._ignoreTimer = false;
5701    }
5702    var entry = this._serializeState(this._state);
5703    if (entry !== this._currentEntry) {
5704        this._ignoreTimer = true;
5705        if (typeof(originalTitle) === "string") {
5706            if (Sys.Browser.agent !== Sys.Browser.InternetExplorer || Sys.Browser.version > 7) {
5707                var newTitle = document.title;
5708                document.title = originalTitle;
5709                this._setState(entry);
5710                document.title = newTitle;
5711            }
5712            else {
5713                this._setState(entry);
5714            }
5715            this._raiseNavigate();
5716        }
5717        else {
5718            this._setState(entry);
5719            this._raiseNavigate();
5720        }
5721    }
5722};
5723Sys._Application.prototype._raiseNavigate = function Sys$_Application$_raiseNavigate() {
5724    var isNew = this._historyPointIsNew;
5725    var h = this.get_events().getHandler("navigate");
5726    var stateClone = {};
5727    for (var key in this._state) {
5728        if (key !== '__s') {
5729            stateClone[key] = this._state[key];
5730        }
5731    }
5732    var args = new Sys.HistoryEventArgs(stateClone);
5733    if (h) {
5734        h(this, args);
5735    }
5736    if (!isNew) {
5737        var err;
5738        try {
5739            if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash &&
5740                (!window.frameElement || window.top.location.hash)) {
5741                (Sys.Browser.version < 3.5) ?
5742                    window.history.go(0) :
5743                    location.hash = this.get_stateString();
5744            }
5745        }
5746        catch(err) {
5747        }
5748    }
5749};
5750Sys._Application.prototype._serializeState = function Sys$_Application$_serializeState(state) {
5751    var serialized = [];
5752    for (var key in state) {
5753        var value = state[key];
5754        if (key === '__s') {
5755            var serverState = value;
5756        }
5757        else {
5758            if (key.indexOf('=') !== -1) throw Error.argument('state', Sys.Res.stateFieldNameInvalid);
5759            serialized[serialized.length] = key + '=' + encodeURIComponent(value);
5760        }
5761    }
5762    return serialized.join('&') + (serverState ? '&&' + serverState : '');
5763};
5764Sys._Application.prototype._setState = function Sys$_Application$_setState(entry, title) {
5765    if (this._enableHistory) {
5766        entry = entry || '';
5767        if (entry !== this._currentEntry) {
5768            if (window.theForm) {
5769                var action = window.theForm.action;
5770                var hashIndex = action.indexOf('#');
5771                window.theForm.action = ((hashIndex !== -1) ? action.substring(0, hashIndex) : action) + '#' + entry;
5772            }
5773        
5774            if (this._historyFrame && this._historyPointIsNew) {
5775                var newDiv = document.createElement("div");
5776                newDiv.appendChild(document.createTextNode(title || document.title));
5777                var htmlEncodedTitle = newDiv.innerHTML;
5778                this._ignoreIFrame = true;
5779                var frameDoc = this._historyFrame.contentWindow.document;
5780                frameDoc.open("javascript:'<html></html>'");
5781                frameDoc.write("<html><head><title>" + htmlEncodedTitle +
5782                    "</title><scri" + "pt type=\"text/javascript\">parent.Sys.Application._onIFrameLoad(" + 
5783                    Sys.Serialization.JavaScriptSerializer.serialize(entry) +
5784                    ");</scri" + "pt></head><body></body></html>");
5785                frameDoc.close();
5786            }
5787            this._ignoreTimer = false;
5788            this._currentEntry = entry;
5789            if (this._historyFrame || this._historyPointIsNew) {
5790                var currentHash = this.get_stateString();
5791                if (entry !== currentHash) {
5792                    var loc = document.location;
5793                    if (loc.href.length - loc.hash.length + entry.length > 2048) {
5794                        throw Error.invalidOperation(String.format(Sys.Res.urlTooLong, 2048));
5795                    }
5796                    window.location.hash = entry;
5797                    this._currentEntry = this.get_stateString();
5798                    if ((typeof(title) !== 'undefined') && (title !== null)) {
5799                        document.title = title;
5800                    }
5801                }
5802            }
5803            this._historyPointIsNew = false;
5804        }
5805    }
5806};
5807Sys._Application.prototype._updateHiddenField = function Sys$_Application$_updateHiddenField(value) {
5808    if (this._clientId) {
5809        var serverStateField = document.getElementById(this._clientId);
5810        if (serverStateField) {
5811            serverStateField.value = value;
5812        }
5813    }
5814};
5815 
5816if (!window.XMLHttpRequest) {
5817    window.XMLHttpRequest = function window$XMLHttpRequest() {
5818        var progIDs = [ 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ];
5819        for (var i = 0, l = progIDs.length; i < l; i++) {
5820            try {
5821                return new ActiveXObject(progIDs[i]);
5822            }
5823            catch (ex) {
5824            }
5825        }
5826        return null;
5827    }
5828}
5829Type.registerNamespace('Sys.Net');
5830 
5831Sys.Net.WebRequestExecutor = function Sys$Net$WebRequestExecutor() {
5832    /// <summary locid="M:J#Sys.Net.WebRequestExecutor.#ctor" />
5833    if (arguments.length !== 0) throw Error.parameterCount();
5834    this._webRequest = null;
5835    this._resultObject = null;
5836}
5837    function Sys$Net$WebRequestExecutor$get_webRequest() {
5838        /// <value type="Sys.Net.WebRequest" locid="P:J#Sys.Net.WebRequestExecutor.webRequest"></value>
5839        if (arguments.length !== 0) throw Error.parameterCount();
5840        return this._webRequest;
5841    }
5842    function Sys$Net$WebRequestExecutor$_set_webRequest(value) {
5843        if (this.get_started()) {
5844            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'set_webRequest'));
5845        }
5846        this._webRequest = value;
5847    }
5848    function Sys$Net$WebRequestExecutor$get_started() {
5849        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.started"></value>
5850        if (arguments.length !== 0) throw Error.parameterCount();
5851        throw Error.notImplemented();
5852    }
5853    function Sys$Net$WebRequestExecutor$get_responseAvailable() {
5854        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.responseAvailable"></value>
5855        if (arguments.length !== 0) throw Error.parameterCount();
5856        throw Error.notImplemented();
5857    }
5858    function Sys$Net$WebRequestExecutor$get_timedOut() {
5859        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.timedOut"></value>
5860        if (arguments.length !== 0) throw Error.parameterCount();
5861        throw Error.notImplemented();
5862    }
5863    function Sys$Net$WebRequestExecutor$get_aborted() {
5864        /// <value type="Boolean" locid="P:J#Sys.Net.WebRequestExecutor.aborted"></value>
5865        if (arguments.length !== 0) throw Error.parameterCount();
5866        throw Error.notImplemented();
5867    }
5868    function Sys$Net$WebRequestExecutor$get_responseData() {
5869        /// <value type="String" locid="P:J#Sys.Net.WebRequestExecutor.responseData"></value>
5870        if (arguments.length !== 0) throw Error.parameterCount();
5871        throw Error.notImplemented();
5872    }
5873    function Sys$Net$WebRequestExecutor$get_statusCode() {
5874        /// <value type="Number" locid="P:J#Sys.Net.WebRequestExecutor.statusCode"></value>
5875        if (arguments.length !== 0) throw Error.parameterCount();
5876        throw Error.notImplemented();
5877    }
5878    function Sys$Net$WebRequestExecutor$get_statusText() {
5879        /// <value type="String" locid="P:J#Sys.Net.WebRequestExecutor.statusText"></value>
5880        if (arguments.length !== 0) throw Error.parameterCount();
5881        throw Error.notImplemented();
5882    }
5883    function Sys$Net$WebRequestExecutor$get_xml() {
5884        /// <value locid="P:J#Sys.Net.WebRequestExecutor.xml"></value>
5885        if (arguments.length !== 0) throw Error.parameterCount();
5886        throw Error.notImplemented();
5887    }
5888    function Sys$Net$WebRequestExecutor$get_object() {
5889        /// <value locid="P:J#Sys.Net.WebRequestExecutor.object"></value>
5890        if (arguments.length !== 0) throw Error.parameterCount();
5891        if (!this._resultObject) {
5892            this._resultObject = Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());
5893        }
5894        return this._resultObject;
5895    }
5896    function Sys$Net$WebRequestExecutor$executeRequest() {
5897        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.executeRequest" />
5898        if (arguments.length !== 0) throw Error.parameterCount();
5899        throw Error.notImplemented();
5900    }
5901    function Sys$Net$WebRequestExecutor$abort() {
5902        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.abort" />
5903        if (arguments.length !== 0) throw Error.parameterCount();
5904        throw Error.notImplemented();
5905    }
5906    function Sys$Net$WebRequestExecutor$getResponseHeader(header) {
5907        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.getResponseHeader" />
5908        /// <param name="header" type="String"></param>
5909        var e = Function._validateParams(arguments, [
5910            {name: "header", type: String}
5911        ]);
5912        if (e) throw e;
5913        throw Error.notImplemented();
5914    }
5915    function Sys$Net$WebRequestExecutor$getAllResponseHeaders() {
5916        /// <summary locid="M:J#Sys.Net.WebRequestExecutor.getAllResponseHeaders" />
5917        if (arguments.length !== 0) throw Error.parameterCount();
5918        throw Error.notImplemented();
5919    }
5920Sys.Net.WebRequestExecutor.prototype = {
5921    get_webRequest: Sys$Net$WebRequestExecutor$get_webRequest,
5922    _set_webRequest: Sys$Net$WebRequestExecutor$_set_webRequest,
5923    get_started: Sys$Net$WebRequestExecutor$get_started,
5924    get_responseAvailable: Sys$Net$WebRequestExecutor$get_responseAvailable,
5925    get_timedOut: Sys$Net$WebRequestExecutor$get_timedOut,
5926    get_aborted: Sys$Net$WebRequestExecutor$get_aborted,
5927    get_responseData: Sys$Net$WebRequestExecutor$get_responseData,
5928    get_statusCode: Sys$Net$WebRequestExecutor$get_statusCode,
5929    get_statusText: Sys$Net$WebRequestExecutor$get_statusText,
5930    get_xml: Sys$Net$WebRequestExecutor$get_xml,
5931    get_object: Sys$Net$WebRequestExecutor$get_object,
5932    executeRequest: Sys$Net$WebRequestExecutor$executeRequest,
5933    abort: Sys$Net$WebRequestExecutor$abort,
5934    getResponseHeader: Sys$Net$WebRequestExecutor$getResponseHeader,
5935    getAllResponseHeaders: Sys$Net$WebRequestExecutor$getAllResponseHeaders
5936}
5937Sys.Net.WebRequestExecutor.registerClass('Sys.Net.WebRequestExecutor');
5938 
5939Sys.Net.XMLDOM = function Sys$Net$XMLDOM(markup) {
5940    /// <summary locid="M:J#Sys.Net.XMLDOM.#ctor" />
5941    /// <param name="markup" type="String"></param>
5942    var e = Function._validateParams(arguments, [
5943        {name: "markup", type: String}
5944    ]);
5945    if (e) throw e;
5946    if (!window.DOMParser) {
5947        var progIDs = [ 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ];
5948        for (var i = 0, l = progIDs.length; i < l; i++) {
5949            try {
5950                var xmlDOM = new ActiveXObject(progIDs[i]);
5951                xmlDOM.async = false;
5952                xmlDOM.loadXML(markup);
5953                xmlDOM.setProperty('SelectionLanguage', 'XPath');
5954                return xmlDOM;
5955            }
5956            catch (ex) {
5957            }
5958        }
5959    }
5960    else {
5961        try {
5962            var domParser = new window.DOMParser();
5963            return domParser.parseFromString(markup, 'text/xml');
5964        }
5965        catch (ex) {
5966        }
5967    }
5968    return null;
5969}
5970Sys.Net.XMLHttpExecutor = function Sys$Net$XMLHttpExecutor() {
5971    /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.#ctor" />
5972    if (arguments.length !== 0) throw Error.parameterCount();
5973    Sys.Net.XMLHttpExecutor.initializeBase(this);
5974    var _this = this;
5975    this._xmlHttpRequest = null;
5976    this._webRequest = null;
5977    this._responseAvailable = false;
5978    this._timedOut = false;
5979    this._timer = null;
5980    this._aborted = false;
5981    this._started = false;
5982    this._onReadyStateChange = (function () {
5983        
5984        if (_this._xmlHttpRequest.readyState === 4 ) {
5985            try {
5986                if (typeof(_this._xmlHttpRequest.status) === "undefined" || _this._xmlHttpRequest.status === 0) {
5987                    return;
5988                }
5989            }
5990            catch(ex) {
5991                return;
5992            }
5993            
5994            _this._clearTimer();
5995            _this._responseAvailable = true;
5996                _this._webRequest.completed(Sys.EventArgs.Empty);
5997                if (_this._xmlHttpRequest != null) {
5998                    _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod;
5999                    _this._xmlHttpRequest = null;
6000                }
6001        }
6002    });
6003    this._clearTimer = (function() {
6004        if (_this._timer != null) {
6005            window.clearTimeout(_this._timer);
6006            _this._timer = null;
6007        }
6008    });
6009    this._onTimeout = (function() {
6010        if (!_this._responseAvailable) {
6011            _this._clearTimer();
6012            _this._timedOut = true;
6013            _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod;
6014            _this._xmlHttpRequest.abort();
6015            _this._webRequest.completed(Sys.EventArgs.Empty);
6016            _this._xmlHttpRequest = null;
6017        }
6018    });
6019}
6020    function Sys$Net$XMLHttpExecutor$get_timedOut() {
6021        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.timedOut"></value>
6022        if (arguments.length !== 0) throw Error.parameterCount();
6023        return this._timedOut;
6024    }
6025    function Sys$Net$XMLHttpExecutor$get_started() {
6026        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.started"></value>
6027        if (arguments.length !== 0) throw Error.parameterCount();
6028        return this._started;
6029    }
6030    function Sys$Net$XMLHttpExecutor$get_responseAvailable() {
6031        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.responseAvailable"></value>
6032        if (arguments.length !== 0) throw Error.parameterCount();
6033        return this._responseAvailable;
6034    }
6035    function Sys$Net$XMLHttpExecutor$get_aborted() {
6036        /// <value type="Boolean" locid="P:J#Sys.Net.XMLHttpExecutor.aborted"></value>
6037        if (arguments.length !== 0) throw Error.parameterCount();
6038        return this._aborted;
6039    }
6040    function Sys$Net$XMLHttpExecutor$executeRequest() {
6041        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.executeRequest" />
6042        if (arguments.length !== 0) throw Error.parameterCount();
6043        this._webRequest = this.get_webRequest();
6044        if (this._started) {
6045            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'executeRequest'));
6046        }
6047        if (this._webRequest === null) {
6048            throw Error.invalidOperation(Sys.Res.nullWebRequest);
6049        }
6050        var body = this._webRequest.get_body();
6051        var headers = this._webRequest.get_headers();
6052        this._xmlHttpRequest = new XMLHttpRequest();
6053        this._xmlHttpRequest.onreadystatechange = this._onReadyStateChange;
6054        var verb = this._webRequest.get_httpVerb();
6055        this._xmlHttpRequest.open(verb, this._webRequest.getResolvedUrl(), true );
6056        this._xmlHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest");
6057        if (headers) {
6058            for (var header in headers) {
6059                var val = headers[header];
6060                if (typeof(val) !== "function")
6061                    this._xmlHttpRequest.setRequestHeader(header, val);
6062            }
6063        }
6064        if (verb.toLowerCase() === "post") {
6065            if ((headers === null) || !headers['Content-Type']) {
6066                this._xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
6067            }
6068            if (!body) {
6069                body = "";
6070            }
6071        }
6072        var timeout = this._webRequest.get_timeout();
6073        if (timeout > 0) {
6074            this._timer = window.setTimeout(Function.createDelegate(this, this._onTimeout), timeout);
6075        }
6076        this._xmlHttpRequest.send(body);
6077        this._started = true;
6078    }
6079    function Sys$Net$XMLHttpExecutor$getResponseHeader(header) {
6080        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.getResponseHeader" />
6081        /// <param name="header" type="String"></param>
6082        /// <returns type="String"></returns>
6083        var e = Function._validateParams(arguments, [
6084            {name: "header", type: String}
6085        ]);
6086        if (e) throw e;
6087        if (!this._responseAvailable) {
6088            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getResponseHeader'));
6089        }
6090        if (!this._xmlHttpRequest) {
6091            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getResponseHeader'));
6092        }
6093        var result;
6094        try {
6095            result = this._xmlHttpRequest.getResponseHeader(header);
6096        } catch (e) {
6097        }
6098        if (!result) result = "";
6099        return result;
6100    }
6101    function Sys$Net$XMLHttpExecutor$getAllResponseHeaders() {
6102        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.getAllResponseHeaders" />
6103        /// <returns type="String"></returns>
6104        if (arguments.length !== 0) throw Error.parameterCount();
6105        if (!this._responseAvailable) {
6106            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getAllResponseHeaders'));
6107        }
6108        if (!this._xmlHttpRequest) {
6109            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getAllResponseHeaders'));
6110        }
6111        return this._xmlHttpRequest.getAllResponseHeaders();
6112    }
6113    function Sys$Net$XMLHttpExecutor$get_responseData() {
6114        /// <value type="String" locid="P:J#Sys.Net.XMLHttpExecutor.responseData"></value>
6115        if (arguments.length !== 0) throw Error.parameterCount();
6116        if (!this._responseAvailable) {
6117            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_responseData'));
6118        }
6119        if (!this._xmlHttpRequest) {
6120            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_responseData'));
6121        }
6122        return this._xmlHttpRequest.responseText;
6123    }
6124    function Sys$Net$XMLHttpExecutor$get_statusCode() {
6125        /// <value type="Number" locid="P:J#Sys.Net.XMLHttpExecutor.statusCode"></value>
6126        if (arguments.length !== 0) throw Error.parameterCount();
6127        if (!this._responseAvailable) {
6128            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusCode'));
6129        }
6130        if (!this._xmlHttpRequest) {
6131            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusCode'));
6132        }
6133        var result = 0;
6134        try {
6135            result = this._xmlHttpRequest.status;
6136        }
6137        catch(ex) {
6138        }
6139        return result;
6140    }
6141    function Sys$Net$XMLHttpExecutor$get_statusText() {
6142        /// <value type="String" locid="P:J#Sys.Net.XMLHttpExecutor.statusText"></value>
6143        if (arguments.length !== 0) throw Error.parameterCount();
6144        if (!this._responseAvailable) {
6145            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusText'));
6146        }
6147        if (!this._xmlHttpRequest) {
6148            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusText'));
6149        }
6150        return this._xmlHttpRequest.statusText;
6151    }
6152    function Sys$Net$XMLHttpExecutor$get_xml() {
6153        /// <value locid="P:J#Sys.Net.XMLHttpExecutor.xml"></value>
6154        if (arguments.length !== 0) throw Error.parameterCount();
6155        if (!this._responseAvailable) {
6156            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_xml'));
6157        }
6158        if (!this._xmlHttpRequest) {
6159            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_xml'));
6160        }
6161        var xml = this._xmlHttpRequest.responseXML;
6162        if (!xml || !xml.documentElement) {
6163            xml = Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);
6164            if (!xml || !xml.documentElement)
6165                return null;
6166        }
6167        else if (navigator.userAgent.indexOf('MSIE') !== -1 && typeof(xml.setProperty) != 'undefined') {
6168            xml.setProperty('SelectionLanguage', 'XPath');
6169        }
6170        if (xml.documentElement.namespaceURI === "http://www.mozilla.org/newlayout/xml/parsererror.xml" &&
6171            xml.documentElement.tagName === "parsererror") {
6172            return null;
6173        }
6174        
6175        if (xml.documentElement.firstChild && xml.documentElement.firstChild.tagName === "parsererror") {
6176            return null;
6177        }
6178        
6179        return xml;
6180    }
6181    function Sys$Net$XMLHttpExecutor$abort() {
6182        /// <summary locid="M:J#Sys.Net.XMLHttpExecutor.abort" />
6183        if (arguments.length !== 0) throw Error.parameterCount();
6184        if (!this._started) {
6185            throw Error.invalidOperation(Sys.Res.cannotAbortBeforeStart);
6186        }
6187        if (this._aborted || this._responseAvailable || this._timedOut)
6188            return;
6189        this._aborted = true;
6190        this._clearTimer();
6191        if (this._xmlHttpRequest && !this._responseAvailable) {
6192            this._xmlHttpRequest.onreadystatechange = Function.emptyMethod;
6193            this._xmlHttpRequest.abort();
6194            
6195            this._xmlHttpRequest = null;            
6196            this._webRequest.completed(Sys.EventArgs.Empty);
6197        }
6198    }
6199Sys.Net.XMLHttpExecutor.prototype = {
6200    get_timedOut: Sys$Net$XMLHttpExecutor$get_timedOut,
6201    get_started: Sys$Net$XMLHttpExecutor$get_started,
6202    get_responseAvailable: Sys$Net$XMLHttpExecutor$get_responseAvailable,
6203    get_aborted: Sys$Net$XMLHttpExecutor$get_aborted,
6204    executeRequest: Sys$Net$XMLHttpExecutor$executeRequest,
6205    getResponseHeader: Sys$Net$XMLHttpExecutor$getResponseHeader,
6206    getAllResponseHeaders: Sys$Net$XMLHttpExecutor$getAllResponseHeaders,
6207    get_responseData: Sys$Net$XMLHttpExecutor$get_responseData,
6208    get_statusCode: Sys$Net$XMLHttpExecutor$get_statusCode,
6209    get_statusText: Sys$Net$XMLHttpExecutor$get_statusText,
6210    get_xml: Sys$Net$XMLHttpExecutor$get_xml,
6211    abort: Sys$Net$XMLHttpExecutor$abort
6212}
6213Sys.Net.XMLHttpExecutor.registerClass('Sys.Net.XMLHttpExecutor', Sys.Net.WebRequestExecutor);
6214 
6215Sys.Net._WebRequestManager = function Sys$Net$_WebRequestManager() {
6216    /// <summary locid="P:J#Sys.Net.WebRequestManager.#ctor" />
6217    if (arguments.length !== 0) throw Error.parameterCount();
6218    this._defaultTimeout = 0;
6219    this._defaultExecutorType = "Sys.Net.XMLHttpExecutor";
6220}
6221    function Sys$Net$_WebRequestManager$add_invokingRequest(handler) {
6222        /// <summary locid="E:J#Sys.Net.WebRequestManager.invokingRequest" />
6223        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
6224        if (e) throw e;
6225        this._get_eventHandlerList().addHandler("invokingRequest", handler);
6226    }
6227    function Sys$Net$_WebRequestManager$remove_invokingRequest(handler) {
6228        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
6229        if (e) throw e;
6230        this._get_eventHandlerList().removeHandler("invokingRequest", handler);
6231    }
6232    function Sys$Net$_WebRequestManager$add_completedRequest(handler) {
6233        /// <summary locid="E:J#Sys.Net.WebRequestManager.completedRequest" />
6234        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
6235        if (e) throw e;
6236        this._get_eventHandlerList().addHandler("completedRequest", handler);
6237    }
6238    function Sys$Net$_WebRequestManager$remove_completedRequest(handler) {
6239        var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
6240        if (e) throw e;
6241        this._get_eventHandlerList().removeHandler("completedRequest", handler);
6242    }
6243    function Sys$Net$_WebRequestManager$_get_eventHandlerList() {
6244        if (!this._events) {
6245            this._events = new Sys.EventHandlerList();
6246        }
6247        return this._events;
6248    }
6249    function Sys$Net$_WebRequestManager$get_defaultTimeout() {
6250        /// <value type="Number" locid="P:J#Sys.Net.WebRequestManager.defaultTimeout"></value>
6251        if (arguments.length !== 0) throw Error.parameterCount();
6252        return this._defaultTimeout;
6253    }
6254    function Sys$Net$_WebRequestManager$set_defaultTimeout(value) {
6255        var e = Function._validateParams(arguments, [{name: "value", type: Number}]);
6256        if (e) throw e;
6257        if (value < 0) {
6258            throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout);
6259        }
6260        this._defaultTimeout = value;
6261    }
6262    function Sys$Net$_WebRequestManager$get_defaultExecutorType() {
6263        /// <value type="String" locid="P:J#Sys.Net.WebRequestManager.defaultExecutorType"></value>
6264        if (arguments.length !== 0) throw Error.parameterCount();
6265        return this._defaultExecutorType;
6266    }
6267    function Sys$Net$_WebRequestManager$set_defaultExecutorType(value) {
6268        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
6269        if (e) throw e;
6270        this._defaultExecutorType = value;
6271    }
6272    function Sys$Net$_WebRequestManager$executeRequest(webRequest) {
6273        /// <summary locid="M:J#Sys.Net.WebRequestManager.executeRequest" />
6274        /// <param name="webRequest" type="Sys.Net.WebRequest"></param>
6275        var e = Function._validateParams(arguments, [
6276            {name: "webRequest", type: Sys.Net.WebRequest}
6277        ]);
6278        if (e) throw e;
6279        var executor = webRequest.get_executor();
6280        if (!executor) {
6281            var failed = false;
6282            try {
6283                var executorType = eval(this._defaultExecutorType);
6284                executor = new executorType();
6285            } catch (e) {
6286                failed = true;
6287            }
6288            if (failed  || !Sys.Net.WebRequestExecutor.isInstanceOfType(executor) || !executor) {
6289                throw Error.argument("defaultExecutorType", String.format(Sys.Res.invalidExecutorType, this._defaultExecutorType));
6290            }
6291            webRequest.set_executor(executor);
6292        }
6293        if (executor.get_aborted()) {
6294            return;
6295        }
6296        var evArgs = new Sys.Net.NetworkRequestEventArgs(webRequest);
6297        var handler = this._get_eventHandlerList().getHandler("invokingRequest");
6298        if (handler) {
6299            handler(this, evArgs);
6300        }
6301        if (!evArgs.get_cancel()) {
6302            executor.executeRequest();
6303        }
6304    }
6305Sys.Net._WebRequestManager.prototype = {
6306    add_invokingRequest: Sys$Net$_WebRequestManager$add_invokingRequest,
6307    remove_invokingRequest: Sys$Net$_WebRequestManager$remove_invokingRequest,
6308    add_completedRequest: Sys$Net$_WebRequestManager$add_completedRequest,
6309    remove_completedRequest: Sys$Net$_WebRequestManager$remove_completedRequest,
6310    _get_eventHandlerList: Sys$Net$_WebRequestManager$_get_eventHandlerList,
6311    get_defaultTimeout: Sys$Net$_WebRequestManager$get_defaultTimeout,
6312    set_defaultTimeout: Sys$Net$_WebRequestManager$set_defaultTimeout,
6313    get_defaultExecutorType: Sys$Net$_WebRequestManager$get_defaultExecutorType,
6314    set_defaultExecutorType: Sys$Net$_WebRequestManager$set_defaultExecutorType,
6315    executeRequest: Sys$Net$_WebRequestManager$executeRequest
6316}
6317Sys.Net._WebRequestManager.registerClass('Sys.Net._WebRequestManager');
6318Sys.Net.WebRequestManager = new Sys.Net._WebRequestManager();
6319 
6320Sys.Net.NetworkRequestEventArgs = function Sys$Net$NetworkRequestEventArgs(webRequest) {
6321    /// <summary locid="M:J#Sys.Net.NetworkRequestEventArgs.#ctor" />
6322    /// <param name="webRequest" type="Sys.Net.WebRequest"></param>
6323    var e = Function._validateParams(arguments, [
6324        {name: "webRequest", type: Sys.Net.WebRequest}
6325    ]);
6326    if (e) throw e;
6327    Sys.Net.NetworkRequestEventArgs.initializeBase(this);
6328    this._webRequest = webRequest;
6329}
6330    function Sys$Net$NetworkRequestEventArgs$get_webRequest() {
6331        /// <value type="Sys.Net.WebRequest" locid="P:J#Sys.Net.NetworkRequestEventArgs.webRequest"></value>
6332        if (arguments.length !== 0) throw Error.parameterCount();
6333        return this._webRequest;
6334    }
6335Sys.Net.NetworkRequestEventArgs.prototype = {
6336    get_webRequest: Sys$Net$NetworkRequestEventArgs$get_webRequest
6337}
6338Sys.Net.NetworkRequestEventArgs.registerClass('Sys.Net.NetworkRequestEventArgs', Sys.CancelEventArgs);
6339 
6340Sys.Net.WebRequest = function Sys$Net$WebRequest() {
6341    /// <summary locid="M:J#Sys.Net.WebRequest.#ctor" />
6342    if (arguments.length !== 0) throw Error.parameterCount();
6343    this._url = "";
6344    this._headers = { };
6345    this._body = null;
6346    this._userContext = null;
6347    this._httpVerb = null;
6348    this._executor = null;
6349    this._invokeCalled = false;
6350    this._timeout = 0;
6351}
6352    function Sys$Net$WebRequest$add_completed(handler) {
6353    /// <summary locid="E:J#Sys.Net.WebRequest.completed" />
6354    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
6355    if (e) throw e;
6356        this._get_eventHandlerList().addHandler("completed", handler);
6357    }
6358    function Sys$Net$WebRequest$remove_completed(handler) {
6359    var e = Function._validateParams(arguments, [{name: "handler", type: Function}]);
6360    if (e) throw e;
6361        this._get_eventHandlerList().removeHandler("completed", handler);
6362    }
6363    function Sys$Net$WebRequest$completed(eventArgs) {
6364        /// <summary locid="M:J#Sys.Net.WebRequest.completed" />
6365        /// <param name="eventArgs" type="Sys.EventArgs"></param>
6366        var e = Function._validateParams(arguments, [
6367            {name: "eventArgs", type: Sys.EventArgs}
6368        ]);
6369        if (e) throw e;
6370        var handler = Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest");
6371        if (handler) {
6372            handler(this._executor, eventArgs);
6373        }
6374        handler = this._get_eventHandlerList().getHandler("completed");
6375        if (handler) {
6376            handler(this._executor, eventArgs);
6377        }
6378    }
6379    function Sys$Net$WebRequest$_get_eventHandlerList() {
6380        if (!this._events) {
6381            this._events = new Sys.EventHandlerList();
6382        }
6383        return this._events;
6384    }
6385    function Sys$Net$WebRequest$get_url() {
6386        /// <value type="String" locid="P:J#Sys.Net.WebRequest.url"></value>
6387        if (arguments.length !== 0) throw Error.parameterCount();
6388        return this._url;
6389    }
6390    function Sys$Net$WebRequest$set_url(value) {
6391        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
6392        if (e) throw e;
6393        this._url = value;
6394    }
6395    function Sys$Net$WebRequest$get_headers() {
6396        /// <value locid="P:J#Sys.Net.WebRequest.headers"></value>
6397        if (arguments.length !== 0) throw Error.parameterCount();
6398        return this._headers;
6399    }
6400    function Sys$Net$WebRequest$get_httpVerb() {
6401        /// <value type="String" locid="P:J#Sys.Net.WebRequest.httpVerb"></value>
6402        if (arguments.length !== 0) throw Error.parameterCount();
6403        if (this._httpVerb === null) {
6404            if (this._body === null) {
6405                return "GET";
6406            }
6407            return "POST";
6408        }
6409        return this._httpVerb;
6410    }
6411    function Sys$Net$WebRequest$set_httpVerb(value) {
6412        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
6413        if (e) throw e;
6414        if (value.length === 0) {
6415            throw Error.argument('value', Sys.Res.invalidHttpVerb);
6416        }
6417        this._httpVerb = value;
6418    }
6419    function Sys$Net$WebRequest$get_body() {
6420        /// <value mayBeNull="true" locid="P:J#Sys.Net.WebRequest.body"></value>
6421        if (arguments.length !== 0) throw Error.parameterCount();
6422        return this._body;
6423    }
6424    function Sys$Net$WebRequest$set_body(value) {
6425        var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]);
6426        if (e) throw e;
6427        this._body = value;
6428    }
6429    function Sys$Net$WebRequest$get_userContext() {
6430        /// <value mayBeNull="true" locid="P:J#Sys.Net.WebRequest.userContext"></value>
6431        if (arguments.length !== 0) throw Error.parameterCount();
6432        return this._userContext;
6433    }
6434    function Sys$Net$WebRequest$set_userContext(value) {
6435        var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]);
6436        if (e) throw e;
6437        this._userContext = value;
6438    }
6439    function Sys$Net$WebRequest$get_executor() {
6440        /// <value type="Sys.Net.WebRequestExecutor" locid="P:J#Sys.Net.WebRequest.executor"></value>
6441        if (arguments.length !== 0) throw Error.parameterCount();
6442        return this._executor;
6443    }
6444    function Sys$Net$WebRequest$set_executor(value) {
6445        var e = Function._validateParams(arguments, [{name: "value", type: Sys.Net.WebRequestExecutor}]);
6446        if (e) throw e;
6447        if (this._executor !== null && this._executor.get_started()) {
6448            throw Error.invalidOperation(Sys.Res.setExecutorAfterActive);
6449        }
6450        this._executor = value;
6451        this._executor._set_webRequest(this);
6452    }
6453    function Sys$Net$WebRequest$get_timeout() {
6454        /// <value type="Number" locid="P:J#Sys.Net.WebRequest.timeout"></value>
6455        if (arguments.length !== 0) throw Error.parameterCount();
6456        if (this._timeout === 0) {
6457            return Sys.Net.WebRequestManager.get_defaultTimeout();
6458        }
6459        return this._timeout;
6460    }
6461    function Sys$Net$WebRequest$set_timeout(value) {
6462        var e = Function._validateParams(arguments, [{name: "value", type: Number}]);
6463        if (e) throw e;
6464        if (value < 0) {
6465            throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout);
6466        }
6467        this._timeout = value;
6468    }
6469    function Sys$Net$WebRequest$getResolvedUrl() {
6470        /// <summary locid="M:J#Sys.Net.WebRequest.getResolvedUrl" />
6471        /// <returns type="String"></returns>
6472        if (arguments.length !== 0) throw Error.parameterCount();
6473        return Sys.Net.WebRequest._resolveUrl(this._url);
6474    }
6475    function Sys$Net$WebRequest$invoke() {
6476        /// <summary locid="M:J#Sys.Net.WebRequest.invoke" />
6477        if (arguments.length !== 0) throw Error.parameterCount();
6478        if (this._invokeCalled) {
6479            throw Error.invalidOperation(Sys.Res.invokeCalledTwice);
6480        }
6481        Sys.Net.WebRequestManager.executeRequest(this);
6482        this._invokeCalled = true;
6483    }
6484Sys.Net.WebRequest.prototype = {
6485    add_completed: Sys$Net$WebRequest$add_completed,
6486    remove_completed: Sys$Net$WebRequest$remove_completed,
6487    completed: Sys$Net$WebRequest$completed,
6488    _get_eventHandlerList: Sys$Net$WebRequest$_get_eventHandlerList,
6489    get_url: Sys$Net$WebRequest$get_url,
6490    set_url: Sys$Net$WebRequest$set_url,
6491    get_headers: Sys$Net$WebRequest$get_headers,
6492    get_httpVerb: Sys$Net$WebRequest$get_httpVerb,
6493    set_httpVerb: Sys$Net$WebRequest$set_httpVerb,
6494    get_body: Sys$Net$WebRequest$get_body,
6495    set_body: Sys$Net$WebRequest$set_body,
6496    get_userContext: Sys$Net$WebRequest$get_userContext,
6497    set_userContext: Sys$Net$WebRequest$set_userContext,
6498    get_executor: Sys$Net$WebRequest$get_executor,
6499    set_executor: Sys$Net$WebRequest$set_executor,
6500    get_timeout: Sys$Net$WebRequest$get_timeout,
6501    set_timeout: Sys$Net$WebRequest$set_timeout,
6502    getResolvedUrl: Sys$Net$WebRequest$getResolvedUrl,
6503    invoke: Sys$Net$WebRequest$invoke
6504}
6505Sys.Net.WebRequest._resolveUrl = function Sys$Net$WebRequest$_resolveUrl(url, baseUrl) {
6506    if (url && url.indexOf('://') !== -1) {
6507        return url;
6508    }
6509    if (!baseUrl || baseUrl.length === 0) {
6510        var baseElement = document.getElementsByTagName('base')[0];
6511        if (baseElement && baseElement.href && baseElement.href.length > 0) {
6512            baseUrl = baseElement.href;
6513        }
6514        else {
6515            baseUrl = document.URL;
6516        }
6517    }
6518    var qsStart = baseUrl.indexOf('?');
6519    if (qsStart !== -1) {
6520        baseUrl = baseUrl.substr(0, qsStart);
6521    }
6522    qsStart = baseUrl.indexOf('#');
6523    if (qsStart !== -1) {
6524        baseUrl = baseUrl.substr(0, qsStart);
6525    }
6526    baseUrl = baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1);
6527    if (!url || url.length === 0) {
6528        return baseUrl;
6529    }
6530    if (url.charAt(0) === '/') {
6531        var slashslash = baseUrl.indexOf('://');
6532        if (slashslash === -1) {
6533            throw Error.argument("baseUrl", Sys.Res.badBaseUrl1);
6534        }
6535        var nextSlash = baseUrl.indexOf('/', slashslash + 3);
6536        if (nextSlash === -1) {
6537            throw Error.argument("baseUrl", Sys.Res.badBaseUrl2);
6538        }
6539        return baseUrl.substr(0, nextSlash) + url;
6540    }
6541    else {
6542        var lastSlash = baseUrl.lastIndexOf('/');
6543        if (lastSlash === -1) {
6544            throw Error.argument("baseUrl", Sys.Res.badBaseUrl3);
6545        }
6546        return baseUrl.substr(0, lastSlash+1) + url;
6547    }
6548}
6549Sys.Net.WebRequest._createQueryString = function Sys$Net$WebRequest$_createQueryString(queryString, encodeMethod, addParams) {
6550    encodeMethod = encodeMethod || encodeURIComponent;
6551    var i = 0, obj, val, arg, sb = new Sys.StringBuilder();
6552    if (queryString) {
6553        for (arg in queryString) {
6554            obj = queryString[arg];
6555            if (typeof(obj) === "function") continue;
6556            val = Sys.Serialization.JavaScriptSerializer.serialize(obj);
6557            if (i++) {
6558                sb.append('&');
6559            }
6560            sb.append(arg);
6561            sb.append('=');
6562            sb.append(encodeMethod(val));
6563        }
6564    }
6565    if (addParams) {
6566        if (i) {
6567            sb.append('&');
6568        }
6569        sb.append(addParams);
6570    }
6571    return sb.toString();
6572}
6573Sys.Net.WebRequest._createUrl = function Sys$Net$WebRequest$_createUrl(url, queryString, addParams) {
6574    if (!queryString && !addParams) {
6575        return url;
6576    }
6577    var qs = Sys.Net.WebRequest._createQueryString(queryString, null, addParams);
6578    return qs.length
6579        ? url + ((url && url.indexOf('?') >= 0) ? "&" : "?") + qs
6580        : url;
6581}
6582Sys.Net.WebRequest.registerClass('Sys.Net.WebRequest');
6583 
6584Sys._ScriptLoaderTask = function Sys$_ScriptLoaderTask(scriptElement, completedCallback) {
6585    /// <summary locid="M:J#Sys._ScriptLoaderTask.#ctor" />
6586    /// <param name="scriptElement" domElement="true"></param>
6587    /// <param name="completedCallback" type="Function"></param>
6588    var e = Function._validateParams(arguments, [
6589        {name: "scriptElement", domElement: true},
6590        {name: "completedCallback", type: Function}
6591    ]);
6592    if (e) throw e;
6593    this._scriptElement = scriptElement;
6594    this._completedCallback = completedCallback;
6595}
6596    function Sys$_ScriptLoaderTask$get_scriptElement() {
6597        /// <value domElement="true" locid="P:J#Sys._ScriptLoaderTask.scriptElement"></value>
6598        if (arguments.length !== 0) throw Error.parameterCount();
6599        return this._scriptElement;
6600    }
6601    function Sys$_ScriptLoaderTask$dispose() {
6602        if(this._disposed) {
6603            return;
6604        }
6605        this._disposed = true;
6606        this._removeScriptElementHandlers();
6607        Sys._ScriptLoaderTask._clearScript(this._scriptElement);
6608        this._scriptElement = null;
6609    }
6610    function Sys$_ScriptLoaderTask$execute() {
6611        /// <summary locid="M:J#Sys._ScriptLoaderTask.execute" />
6612        if (arguments.length !== 0) throw Error.parameterCount();
6613        if (this._ensureReadyStateLoaded()) {
6614            this._executeInternal();
6615        }
6616    }
6617    function Sys$_ScriptLoaderTask$_executeInternal() {
6618        this._addScriptElementHandlers();
6619        var headElements = document.getElementsByTagName('head');
6620        if (headElements.length === 0) {
6621             throw new Error.invalidOperation(Sys.Res.scriptLoadFailedNoHead);
6622        }
6623        else {
6624             headElements[0].appendChild(this._scriptElement);
6625        }
6626    }
6627    function Sys$_ScriptLoaderTask$_ensureReadyStateLoaded() {
6628        if (this._useReadyState() && this._scriptElement.readyState !== 'loaded' && this._scriptElement.readyState !== 'complete') {
6629            this._scriptDownloadDelegate = Function.createDelegate(this, this._executeInternal);
6630            $addHandler(this._scriptElement, 'readystatechange', this._scriptDownloadDelegate);
6631            return false;
6632        }
6633        return true;
6634    }
6635    function Sys$_ScriptLoaderTask$_addScriptElementHandlers() {
6636        if (this._scriptDownloadDelegate) {
6637            $removeHandler(this._scriptElement, 'readystatechange', this._scriptDownloadDelegate);
6638            this._scriptDownloadDelegate = null;
6639        }
6640        this._scriptLoadDelegate = Function.createDelegate(this, this._scriptLoadHandler);
6641        if (this._useReadyState()) {
6642            $addHandler(this._scriptElement, 'readystatechange', this._scriptLoadDelegate);
6643        } else {
6644            $addHandler(this._scriptElement, 'load', this._scriptLoadDelegate);
6645        }
6646        if (this._scriptElement.addEventListener) {
6647            this._scriptErrorDelegate = Function.createDelegate(this, this._scriptErrorHandler);
6648            this._scriptElement.addEventListener('error', this._scriptErrorDelegate, false);
6649        }
6650    }
6651    function Sys$_ScriptLoaderTask$_removeScriptElementHandlers() {
6652        if(this._scriptLoadDelegate) {
6653            var scriptElement = this.get_scriptElement();
6654            if (this._scriptDownloadDelegate) {
6655                $removeHandler(this._scriptElement, 'readystatechange', this._scriptDownloadDelegate);
6656                this._scriptDownloadDelegate = null;
6657            }
6658            if (this._useReadyState() && this._scriptLoadDelegate) {
6659                $removeHandler(scriptElement, 'readystatechange', this._scriptLoadDelegate);
6660            }
6661            else {
6662                $removeHandler(scriptElement, 'load', this._scriptLoadDelegate);
6663            }
6664            if (this._scriptErrorDelegate) {
6665                this._scriptElement.removeEventListener('error', this._scriptErrorDelegate, false);
6666                this._scriptErrorDelegate = null;
6667            }
6668            this._scriptLoadDelegate = null;
6669        }
6670    }
6671    function Sys$_ScriptLoaderTask$_scriptErrorHandler() {
6672        if(this._disposed) {
6673            return;
6674        }
6675        
6676        this._completedCallback(this.get_scriptElement(), false);
6677    }
6678    function Sys$_ScriptLoaderTask$_scriptLoadHandler() {
6679        if(this._disposed) {
6680            return;
6681        }
6682        var scriptElement = this.get_scriptElement();
6683        if (this._useReadyState() && scriptElement.readyState !== 'complete') {
6684            return;
6685        }
6686        this._completedCallback(scriptElement, true);
6687    }
6688    function Sys$_ScriptLoaderTask$_useReadyState() {
6689        return (Sys.Browser.agent === Sys.Browser.InternetExplorer && (Sys.Browser.version < 9 || ((document.documentMode || 0) < 9)));
6690    }
6691Sys._ScriptLoaderTask.prototype = {
6692    get_scriptElement: Sys$_ScriptLoaderTask$get_scriptElement,
6693    dispose: Sys$_ScriptLoaderTask$dispose,
6694    execute: Sys$_ScriptLoaderTask$execute,
6695    _executeInternal: Sys$_ScriptLoaderTask$_executeInternal,
6696    _ensureReadyStateLoaded: Sys$_ScriptLoaderTask$_ensureReadyStateLoaded,
6697    _addScriptElementHandlers: Sys$_ScriptLoaderTask$_addScriptElementHandlers,    
6698    _removeScriptElementHandlers: Sys$_ScriptLoaderTask$_removeScriptElementHandlers,    
6699    _scriptErrorHandler: Sys$_ScriptLoaderTask$_scriptErrorHandler,
6700    _scriptLoadHandler: Sys$_ScriptLoaderTask$_scriptLoadHandler,
6701    _useReadyState: Sys$_ScriptLoaderTask$_useReadyState
6702}
6703Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask", null, Sys.IDisposable);
6704Sys._ScriptLoaderTask._clearScript = function Sys$_ScriptLoaderTask$_clearScript(scriptElement) {
6705    if (!Sys.Debug.isDebug && scriptElement.parentNode) {
6706        scriptElement.parentNode.removeChild(scriptElement);
6707    }
6708}
6709Type.registerNamespace('Sys.Net');
6710 
6711Sys.Net.WebServiceProxy = function Sys$Net$WebServiceProxy() {
6712}
6713    function Sys$Net$WebServiceProxy$get_timeout() {
6714        /// <value type="Number" locid="P:J#Sys.Net.WebServiceProxy.timeout"></value>
6715        if (arguments.length !== 0) throw Error.parameterCount();
6716        return this._timeout || 0;
6717    }
6718    function Sys$Net$WebServiceProxy$set_timeout(value) {
6719        var e = Function._validateParams(arguments, [{name: "value", type: Number}]);
6720        if (e) throw e;
6721        if (value < 0) { throw Error.argumentOutOfRange('value', value, Sys.Res.invalidTimeout); }
6722        this._timeout = value;
6723    }
6724    function Sys$Net$WebServiceProxy$get_defaultUserContext() {
6725        /// <value mayBeNull="true" locid="P:J#Sys.Net.WebServiceProxy.defaultUserContext"></value>
6726        if (arguments.length !== 0) throw Error.parameterCount();
6727        return (typeof(this._userContext) === "undefined") ? null : this._userContext;
6728    }
6729    function Sys$Net$WebServiceProxy$set_defaultUserContext(value) {
6730        var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]);
6731        if (e) throw e;
6732        this._userContext = value;
6733    }
6734    function Sys$Net$WebServiceProxy$get_defaultSucceededCallback() {
6735        /// <value type="Function" mayBeNull="true" locid="P:J#Sys.Net.WebServiceProxy.defaultSucceededCallback"></value>
6736        if (arguments.length !== 0) throw Error.parameterCount();
6737        return this._succeeded || null;
6738    }
6739    function Sys$Net$WebServiceProxy$set_defaultSucceededCallback(value) {
6740        var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]);
6741        if (e) throw e;
6742        this._succeeded = value;
6743    }
6744    function Sys$Net$WebServiceProxy$get_defaultFailedCallback() {
6745        /// <value type="Function" mayBeNull="true" locid="P:J#Sys.Net.WebServiceProxy.defaultFailedCallback"></value>
6746        if (arguments.length !== 0) throw Error.parameterCount();
6747        return this._failed || null;
6748    }
6749    function Sys$Net$WebServiceProxy$set_defaultFailedCallback(value) {
6750        var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]);
6751        if (e) throw e;
6752        this._failed = value;
6753    }
6754    function Sys$Net$WebServiceProxy$get_enableJsonp() {
6755        /// <value type="Boolean" locid="P:J#Sys.Net.WebServiceProxy.enableJsonp"></value>
6756        if (arguments.length !== 0) throw Error.parameterCount();
6757        return !!this._jsonp;
6758    }
6759    function Sys$Net$WebServiceProxy$set_enableJsonp(value) {
6760        var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]);
6761        if (e) throw e;
6762        this._jsonp = value;
6763    }
6764    function Sys$Net$WebServiceProxy$get_path() {
6765        /// <value type="String" locid="P:J#Sys.Net.WebServiceProxy.path"></value>
6766        if (arguments.length !== 0) throw Error.parameterCount();
6767        return this._path || null;
6768    }
6769    function Sys$Net$WebServiceProxy$set_path(value) {
6770        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
6771        if (e) throw e;
6772        this._path = value;
6773    }
6774    function Sys$Net$WebServiceProxy$get_jsonpCallbackParameter() {
6775        /// <value type="String" locid="P:J#Sys.Net.WebServiceProxy.jsonpCallbackParameter"></value>
6776        if (arguments.length !== 0) throw Error.parameterCount();
6777        return this._callbackParameter || "callback";
6778    }
6779    function Sys$Net$WebServiceProxy$set_jsonpCallbackParameter(value) {
6780        var e = Function._validateParams(arguments, [{name: "value", type: String}]);
6781        if (e) throw e;
6782        this._callbackParameter = value;
6783    }
6784    function Sys$Net$WebServiceProxy$_invoke(servicePath, methodName, useGet, params, onSuccess, onF
6784ailure, userContext) {
6785        /// <summary locid="M:J#Sys.Net.WebServiceProxy._invoke" />
6786        /// <param name="servicePath" type="String"></param>
6787        /// <param name="methodName" type="String"></param>
6788        /// <param name="useGet" type="Boolean"></param>
6789        /// <param name="params"></param>
6790        /// <param name="onSuccess" type="Function" mayBeNull="true" optional="true"></param>
6791        /// <param name="onFailure" type="Function" mayBeNull="true" optional="true"></param>
6792        /// <param name="userContext" mayBeNull="true" optional="true"></param>
6793        /// <returns type="Sys.Net.WebRequest" mayBeNull="true"></returns>
6794        var e = Function._validateParams(arguments, [
6795            {name: "servicePath", type: String},
6796            {name: "methodName", type: String},
6797            {name: "useGet", type: Boolean},
6798            {name: "params"},
6799            {name: "onSuccess", type: Function, mayBeNull: true, optional: true},
6800            {name: "onFailure", type: Function, mayBeNull: true, optional: true},
6801            {name: "userContext", mayBeNull: true, optional: true}
6802        ]);
6803        if (e) throw e;
6804        onSuccess = onSuccess || this.get_defaultSucceededCallback();
6805        onFailure = onFailure || this.get_defaultFailedCallback();
6806        if (userContext === null || typeof userContext === 'undefined') userContext = this.get_defaultUserContext();
6807        return Sys.Net.WebServiceProxy.invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, this.get_timeout(), this.get_enableJsonp(), this.get_jsonpCallbackParameter());
6808    }
6809Sys.Net.WebServiceProxy.prototype = {
6810    get_timeout: Sys$Net$WebServiceProxy$get_timeout,
6811    set_timeout: Sys$Net$WebServiceProxy$set_timeout,
6812    get_defaultUserContext: Sys$Net$WebServiceProxy$get_defaultUserContext,
6813    set_defaultUserContext: Sys$Net$WebServiceProxy$set_defaultUserContext,
6814    get_defaultSucceededCallback: Sys$Net$WebServiceProxy$get_defaultSucceededCallback,
6815    set_defaultSucceededCallback: Sys$Net$WebServiceProxy$set_defaultSucceededCallback,
6816    get_defaultFailedCallback: Sys$Net$WebServiceProxy$get_defaultFailedCallback,
6817    set_defaultFailedCallback: Sys$Net$WebServiceProxy$set_defaultFailedCallback,
6818    get_enableJsonp: Sys$Net$WebServiceProxy$get_enableJsonp,
6819    set_enableJsonp: Sys$Net$WebServiceProxy$set_enableJsonp,
6820    get_path: Sys$Net$WebServiceProxy$get_path,
6821    set_path: Sys$Net$WebServiceProxy$set_path,
6822    get_jsonpCallbackParameter: Sys$Net$WebServiceProxy$get_jsonpCallbackParameter,
6823    set_jsonpCallbackParameter: Sys$Net$WebServiceProxy$set_jsonpCallbackParameter,
6824    _invoke: Sys$Net$WebServiceProxy$_invoke
6825}
6826Sys.Net.WebServiceProxy.registerClass('Sys.Net.WebServiceProxy');
6827Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout, enableJsonp, jsonpCallbackParameter) {
6828    /// <summary locid="M:J#Sys.Net.WebServiceProxy.invoke" />
6829    /// <param name="servicePath" type="String"></param>
6830    /// <param name="methodName" type="String" mayBeNull="true" optional="true"></param>
6831    /// <param name="useGet" type="Boolean" optional="true"></param>
6832    /// <param name="params" mayBeNull="true" optional="true"></param>
6833    /// <param name="onSuccess" type="Function" mayBeNull="true" optional="true"></param>
6834    /// <param name="onFailure" type="Function" mayBeNull="true" optional="true"></param>
6835    /// <param name="userContext" mayBeNull="true" optional="true"></param>
6836    /// <param name="timeout" type="Number" optional="true"></param>
6837    /// <param name="enableJsonp" type="Boolean" optional="true" mayBeNull="true"></param>
6838    /// <param name="jsonpCallbackParameter" type="String" optional="true" mayBeNull="true"></param>
6839    /// <returns type="Sys.Net.WebRequest" mayBeNull="true"></returns>
6840    var e = Function._validateParams(arguments, [
6841        {name: "servicePath", type: String},
6842        {name: "methodName", type: String, mayBeNull: true, optional: true},
6843        {name: "useGet", type: Boolean, optional: true},
6844        {name: "params", mayBeNull: true, optional: true},
6845        {name: "onSuccess", type: Function, mayBeNull: true, optional: true},
6846        {name: "onFailure", type: Function, mayBeNull: true, optional: true},
6847        {name: "userContext", mayBeNull: true, optional: true},
6848        {name: "timeout", type: Number, optional: true},
6849        {name: "enableJsonp", type: Boolean, mayBeNull: true, optional: true},
6850        {name: "jsonpCallbackParameter", type: String, mayBeNull: true, optional: true}
6851    ]);
6852    if (e) throw e;
6853    var schemeHost = (enableJsonp !== false) ? Sys.Net.WebServiceProxy._xdomain.exec(servicePath) : null,
6854        tempCallback, jsonp = schemeHost && (schemeHost.length === 3) && 
6855            ((schemeHost[1] !== location.protocol) || (schemeHost[2] !== location.host));
6856    useGet = jsonp || useGet;
6857    if (jsonp) {
6858        jsonpCallbackParameter = jsonpCallbackParameter || "callback";
6859        tempCallback = "_jsonp" + Sys._jsonp++;
6860    }
6861    if (!params) params = {};
6862    var urlParams = params;
6863    if (!useGet || !urlParams) urlParams = {};
6864    var script, error, timeoutcookie = null, loader, body = null,
6865        url = Sys.Net.WebRequest._createUrl(methodName
6866            ? (servicePath+"/"+encodeURIComponent(methodName))
6867            : servicePath, urlParams, jsonp ? (jsonpCallbackParameter + "=Sys." + tempCallback) : null);
6868    if (jsonp) {
6869        script = document.createElement("script");
6870        script.src = url;
6871        loader = new Sys._ScriptLoaderTask(script, function(script, loaded) {
6872            if (!loaded || tempCallback) {
6873                jsonpComplete({ Message: String.format(Sys.Res.webServiceFailedNoMsg, methodName) }, -1);
6874            }
6875        });
6876        function jsonpComplete(data, statusCode) {
6877            if (timeoutcookie !== null) {
6878                window.clearTimeout(timeoutcookie);
6879                timeoutcookie = null;
6880            }
6881            loader.dispose();
6882            delete Sys[tempCallback];
6883            tempCallback = null; 
6884            if ((typeof(statusCode) !== "undefined") && (statusCode !== 200)) {
6885                if (onFailure) {
6886                    error = new Sys.Net.WebServiceError(false,
6887                            data.Message || String.format(Sys.Res.webServiceFailedNoMsg, methodName),
6888                            data.StackTrace || null,
6889                            data.ExceptionType || null,
6890                            data);
6891                    error._statusCode = statusCode;
6892                    onFailure(error, userContext, methodName);
6893                }
6894                else {
6895                    if (data.StackTrace && data.Message) {
6896                        error = data.StackTrace + "-- " + data.Message;
6897                    }
6898                    else {
6899                        error = data.StackTrace || data.Message;
6900                    }
6901                    error = String.format(error ? Sys.Res.webServiceFailed : Sys.Res.webServiceFailedNoMsg, methodName, error);
6902                    throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));
6903                }
6904            }
6905            else if (onSuccess) {
6906                onSuccess(data, userContext, methodName);
6907            }
6908        }
6909        Sys[tempCallback] = jsonpComplete;
6910        loader.execute();
6911        return null;
6912    }
6913    var request = new Sys.Net.WebRequest();
6914    request.set_url(url);
6915    request.get_headers()['Content-Type'] = 'application/json; charset=utf-8';
6916    if (!useGet) {
6917        body = Sys.Serialization.JavaScriptSerializer.serialize(params);
6918        if (body === "{}") body = "";
6919    }
6920    request.set_body(body);
6921    request.add_completed(onComplete);
6922    if (timeout && timeout > 0) request.set_timeout(timeout);
6923    request.invoke();
6924    
6925    function onComplete(response, eventArgs) {
6926        if (response.get_responseAvailable()) {
6927            var statusCode = response.get_statusCode();
6928            var result = null;
6929           
6930            try {
6931                var contentType = response.getResponseHeader("Content-Type");
6932                if (contentType.startsWith("application/json")) {
6933                    result = response.get_object();
6934                }
6935                else if (contentType.startsWith("text/xml")) {
6936                    result = response.get_xml();
6937                }
6938                else {
6939                    result = response.get_responseData();
6940                }
6941            } catch (ex) {
6942            }
6943            var error = response.getResponseHeader("jsonerror");
6944            var errorObj = (error === "true");
6945            if (errorObj) {
6946                if (result) {
6947                    result = new Sys.Net.WebServiceError(false, result.Message, result.StackTrace, result.ExceptionType, result);
6948                }
6949            }
6950            else if (contentType.startsWith("application/json")) {
6951                result = (!result || (typeof(result.d) === "undefined")) ? result : result.d;
6952            }
6953            if (((statusCode < 200) || (statusCode >= 300)) || errorObj) {
6954                if (onFailure) {
6955                    if (!result || !errorObj) {
6956                        result = new Sys.Net.WebServiceError(false , String.format(Sys.Res.webServiceFailedNoMsg, methodName));
6957                    }
6958                    result._statusCode = statusCode;
6959                    onFailure(result, userContext, methodName);
6960                }
6961                else {
6962                    if (result && errorObj) {
6963                        error = result.get_exceptionType() + "-- " + result.get_message();
6964                    }
6965                    else {
6966                        error = response.get_responseData();
6967                    }
6968                    throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));
6969                }
6970            }
6971            else if (onSuccess) {
6972                onSuccess(result, userContext, methodName);
6973            }
6974        }
6975        else {
6976            var msg;
6977            if (response.get_timedOut()) {
6978                msg = String.format(Sys.Res.webServiceTimedOut, methodName);
6979            }
6980            else {
6981                msg = String.format(Sys.Res.webServiceFailedNoMsg, methodName)
6982            }
6983            if (onFailure) {
6984                onFailure(new Sys.Net.WebServiceError(response.get_timedOut(), msg, "", ""), userContext, methodName);
6985            }
6986            else {
6987                throw Sys.Net.WebServiceProxy._createFailedError(methodName, msg);
6988            }
6989        }
6990    }
6991    return request;
6992}
6993Sys.Net.WebServiceProxy._createFailedError = function Sys$Net$WebServiceProxy$_createFailedError(methodName, errorMessage) {
6994    var displayMessage = "Sys.Net.WebServiceFailedException: " + errorMessage;
6995    var e = Error.create(displayMessage, { 'name': 'Sys.Net.WebServiceFailedException', 'methodName': methodName });
6996    e.popStackFrame();
6997    return e;
6998}
6999Sys.Net.WebServiceProxy._defaultFailedCallback = function Sys$Net$WebServiceProxy$_defaultFailedCallback(err, methodName) {
7000    var error = err.get_exceptionType() + "-- " + err.get_message();
7001    throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));
7002}
7003Sys.Net.WebServiceProxy._generateTypedConstructor = function Sys$Net$WebServiceProxy$_generateTypedConstructor(type) {
7004    return function(properties) {
7005        if (properties) {
7006            for (var name in properties) {
7007                this[name] = properties[name];
7008            }
7009        }
7010        this.__type = type;
7011    }
7012}
7013Sys._jsonp = 0;
7014Sys.Net.WebServiceProxy._xdomain = /^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/;
7015 
7016Sys.Net.WebServiceError = function Sys$Net$WebServiceError(timedOut, message, stackTrace, exceptionType, errorObject) {
7017    /// <summary locid="M:J#Sys.Net.WebServiceError.#ctor" />
7018    /// <param name="timedOut" type="Boolean"></param>
7019    /// <param name="message" type="String" mayBeNull="true"></param>
7020    /// <param name="stackTrace" type="String" mayBeNull="true" optional="true"></param>
7021    /// <param name="exceptionType" type="String" mayBeNull="true" optional="true"></param>
7022    /// <param name="errorObject" type="Object" mayBeNull="true" optional="true"></param>
7023    var e = Function._validateParams(arguments, [
7024        {name: "timedOut", type: Boolean},
7025        {name: "message", type: String, mayBeNull: true},
7026        {name: "stackTrace", type: String, mayBeNull: true, optional: true},
7027        {name: "exceptionType", type: String, mayBeNull: true, optional: true},
7028        {name: "errorObject", type: Object, mayBeNull: true, optional: true}
7029    ]);
7030    if (e) throw e;
7031    this._timedOut = timedOut;
7032    this._message = message;
7033    this._stackTrace = stackTrace;
7034    this._exceptionType = exceptionType;
7035    this._errorObject = errorObject;
7036    this._statusCode = -1;
7037}
7038    function Sys$Net$WebServiceError$get_timedOut() {
7039        /// <value type="Boolean" locid="P:J#Sys.Net.WebServiceError.timedOut"></value>
7040        if (arguments.length !== 0) throw Error.parameterCount();
7041        return this._timedOut;
7042    }
7043    function Sys$Net$WebServiceError$get_statusCode() {
7044        /// <value type="Number" locid="P:J#Sys.Net.WebServiceError.statusCode"></value>
7045        if (arguments.length !== 0) throw Error.parameterCount();
7046        return this._statusCode;
7047    }
7048    function Sys$Net$WebServiceError$get_message() {
7049        /// <value type="String" locid="P:J#Sys.Net.WebServiceError.message"></value>
7050        if (arguments.length !== 0) throw Error.parameterCount();
7051        return this._message;
7052    }
7053    function Sys$Net$WebServiceError$get_stackTrace() {
7054        /// <value type="String" locid="P:J#Sys.Net.WebServiceError.stackTrace"></value>
7055        if (arguments.length !== 0) throw Error.parameterCount();
7056        return this._stackTrace || "";
7057    }
7058    function Sys$Net$WebServiceError$get_exceptionType() {
7059        /// <value type="String" locid="P:J#Sys.Net.WebServiceError.exceptionType"></value>
7060        if (arguments.length !== 0) throw Error.parameterCount();
7061        return this._exceptionType || "";
7062    }
7063    function Sys$Net$WebServiceError$get_errorObject() {
7064        /// <value type="Object" locid="P:J#Sys.Net.WebServiceError.errorObject"></value>
7065        if (arguments.length !== 0) throw Error.parameterCount();
7066        return this._errorObject || null;
7067    }
7068Sys.Net.WebServiceError.prototype = {
7069    get_timedOut: Sys$Net$WebServiceError$get_timedOut,
7070    get_statusCode: Sys$Net$WebServiceError$get_statusCode,
7071    get_message: Sys$Net$WebServiceError$get_message,
7072    get_stackTrace: Sys$Net$WebServiceError$get_stackTrace,
7073    get_exceptionType: Sys$Net$WebServiceError$get_exceptionType,
7074    get_errorObject: Sys$Net$WebServiceError$get_errorObject
7075}
7076Sys.Net.WebServiceError.registerClass('Sys.Net.WebServiceError');
7077
7078
7079Type.registerNamespace('Sys');
7080Sys.Res={
7081"argumentInteger":"Value must be an integer.",
7082"invokeCalledTwice":"Cannot call invoke more than once.",
7083"webServiceFailed":"The server method \u0027{0}\u0027 failed with the following error: {1}",
7084"argumentType":"Object cannot be converted to the required type.",
7085"argumentNull":"Value cannot be null.",
7086"scriptAlreadyLoaded":"The script \u0027{0}\u0027 has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.",
7087"scriptDependencyNotFound":"The script \u0027{0}\u0027 failed to load because it is dependent on script \u0027{1}\u0027.",
7088"formatBadFormatSpecifier":"Format specifier was invalid.",
7089"requiredScriptReferenceNotIncluded":"\u0027{0}\u0027 requires that you have included a script reference to \u0027{1}\u0027.",
7090"webServiceFailedNoMsg":"The server method \u0027{0}\u0027 failed.",
7091"argumentDomElement":"Value must be a DOM element.",
7092"invalidExecutorType":"Could not create a valid Sys.Net.WebRequestExecutor from: {0}.",
7093"cannotCallBeforeResponse":"Cannot call {0} when responseAvailable is false.",
7094"actualValue":"Actual value was {0}.",
7095"enumInvalidValue":"\u0027{0}\u0027 is not a valid value for enum {1}.",
7096"scriptLoadFailed":"The script \u0027{0}\u0027 could not be loaded.",
7097"parameterCount":"Parameter count mismatch.",
7098"cannotDeserializeEmptyString":"Cannot deserialize empty string.",
7099"formatInvalidString":"Input string was not in a correct format.",
7100"invalidTimeout":"Value must be greater than or equal to zero.",
7101"cannotAbortBeforeStart":"Cannot abort when executor has not started.",
7102"argument":"Value does not fall within the expected range.",
7103"cannotDeserializeInvalidJson":"Cannot deserialize. The data does not correspond to valid JSON.",
7104"invalidHttpVerb":"httpVerb cannot be set to an empty or null string.",
7105"nullWebRequest":"Cannot call executeRequest with a null webRequest.",
7106"eventHandlerInvalid":"Handler was not added through the Sys.UI.DomEvent.addHandler method.",
7107"cannotSerializeNonFiniteNumbers":"Cannot serialize non finite numbers.",
7108"argumentUndefined":"Value cannot be undefined.",
7109"webServiceInvalidReturnType":"The server method \u0027{0}\u0027 returned an invalid type. Expected type: {1}",
7110"servicePathNotSet":"The path to the web service has not been set.",
7111"argumentTypeWithTypes":"Object of type \u0027{0}\u0027 cannot be converted to type \u0027{1}\u0027.",
7112"cannotCallOnceStarted":"Cannot call {0} once started.",
7113"badBaseUrl1":"Base URL does not contain ://.",
7114"badBaseUrl2":"Base URL does not contain another /.",
7115"badBaseUrl3":"Cannot find last / in base URL.",
7116"setExecutorAfterActive":"Cannot set executor after it has become active.",
7117"paramName":"Parameter name: {0}",
7118"nullReferenceInPath":"Null reference while evaluating data path: \u0027{0}\u0027.",
7119"cannotCallOutsideHandler":"Cannot call {0} outside of a completed event handler.",
7120"cannotSerializeObjectWithCycle":"Cannot serialize object with cyclic reference within child properties.",
7121"format":"One of the identified items was in an invalid format.",
7122"assertFailedCaller":"Assertion Failed: {0}\r\nat {1}",
7123"argumentOutOfRange":"Specified argument was out of the range of valid values.",
7124"webServiceTimedOut":"The server method \u0027{0}\u0027 timed out.",
7125"notImplemented":"The method or operation is not implemented.",
7126"assertFailed":"Assertion Failed: {0}",
7127"invalidOperation":"Operation is not valid due to the current state of the object.",
7128"breakIntoDebugger":"{0}\r\n\r\nBreak into debugger?",
7129"argumentTypeName":"Value is not the name of an existing type.",
7130"cantBeCalledAfterDispose":"Can\u0027t be called after dispose.",
7131"componentCantSetIdAfterAddedToApp":"The id property of a component can\u0027t be set after it\u0027s been added to the Application object.",
7132"behaviorDuplicateName":"A behavior with name \u0027{0}\u0027 already exists or it is the name of an existing property on the target element.",
7133"notATypeName":"Value is not a valid type name.",
7134"elementNotFound":"An element with id \u0027{0}\u0027 could not be found.",
7135"stateMustBeStringDictionary":"The state object can only have null and string fields.",
7136"boolTrueOrFalse":"Value must be \u0027true\u0027 or \u0027false\u0027.",
7137"scriptLoadFailedNoHead":"ScriptLoader requires pages to contain a \u003chead\u003e element.",
7138"stringFormatInvalid":"The format string is invalid.",
7139"referenceNotFound":"Component \u0027{0}\u0027 was not found.",
7140"enumReservedName":"\u0027{0}\u0027 is a reserved name that can\u0027t be used as an enum value name.",
7141"circularParentChain":"The chain of control parents can\u0027t have circular references.",
7142"namespaceContainsNonObject":"Object {0} already exists and is not an object.",
7143"undefinedEvent":"\u0027{0}\u0027 is not an event.",
7144"propertyUndefined":"\u0027{0}\u0027 is not a property or an existing field.",
7145"observableConflict":"Object already contains a member with the name \u0027{0}\u0027.",
7146"historyCannotEnableHistory":"Cannot set enableHistory after initialization.",
7147"scriptLoadFailedDebug":"The script \u0027{0}\u0027 failed to load. Check for:\r\n Inaccessible path.\r\n Script errors. (IE) Enable \u0027Display a notification about every script error\u0027 under advanced settings.",
7148"propertyNotWritable":"\u0027{0}\u0027 is not a writable property.",
7149"enumInvalidValueName":"\u0027{0}\u0027 is not a valid name for an enum value.",
7150"controlAlreadyDefined":"A control is already associated with the element.",
7151"addHandlerCantBeUsedForError":"Can\u0027t add a handler for the error event using this method. Please set the window.onerror property instead.",
7152"cantAddNonFunctionhandler":"Can\u0027t add a handler that is not a function.",
7153"invalidNameSpace":"Value is not a valid namespace identifier.",
7154"notAnInterface":"Value is not a valid interface.",
7155"eventHandlerNotFunction":"Handler must be a function.",
7156"propertyNotAnArray":"\u0027{0}\u0027 is not an Array property.",
7157"namespaceContainsClass":"Object {0} already exists as a class, enum, or interface.",
7158"typeRegisteredTwice":"Type {0} has already been registered. The type may be defined multiple times or the script file that defines it may have already been loaded. A possible cause is a change of settings during a partial update.",
7159"cantSetNameAfterInit":"The name property can\u0027t be set on this object after initialization.",
7160"historyMissingFrame":"For the history feature to work in IE, the page must have an iFrame element with id \u0027__historyFrame\u0027 pointed to a page that gets its title from the \u0027title\u0027 query string parameter and calls Sys.Application._onIFrameLoad() on the parent window. This can be done by setting EnableHistory to true on ScriptManager.",
7161"appDuplicateComponent":"Two components with the same id \u0027{0}\u0027 can\u0027t be added to the application.",
7162"historyCannotAddHistoryPointWithHistoryDisabled":"A history point can only be added if enableHistory is set to true.",
7163"baseNotAClass":"Value is not a class.",
7164"expectedElementOrId":"Value must be a DOM element or DOM element Id.",
7165"methodNotFound":"No method found with name \u0027{0}\u0027.",
7166"arrayParseBadFormat":"Value must be a valid string representation for an array. It must start with a \u0027[\u0027 and end with a \u0027]\u0027.",
7167"stateFieldNameInvalid":"State field names must not contain any \u0027=\u0027 characters.",
7168"cantSetId":"The id property can\u0027t be set on this object.",
7169"stringFormatBraceMismatch":"The format string contains an unmatched opening or closing brace.",
7170"enumValueNotInteger":"An enumeration definition can only contain integer values.",
7171"propertyNullOrUndefined":"Cannot set the properties of \u0027{0}\u0027 because it returned a null value.",
7172"argumentDomNode":"Value must be a DOM element or a text node.",
7173"componentCantSetIdTwice":"The id property of a component can\u0027t be set more than once.",
7174"createComponentOnDom":"Value must be null for Components that are not Controls or Behaviors.",
7175"createNotComponent":"{0} does not derive from Sys.Component.",
7176"createNoDom":"Value must not be null for Controls and Behaviors.",
7177"cantAddWithoutId":"Can\u0027t add a component that doesn\u0027t have an id.",
7178"urlTooLong":"The history state must be small enough to not make the url larger than {0} characters.",
7179"notObservable":"Instances of type \u0027{0}\u0027 cannot be observed.",
7180"badTypeName":"Value is not the name of the type being registered or the name is a reserved word."
7181};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.