﻿//-----------------------------------------------------------------------
// Copyright (C) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------
// MicrosoftAjaxWebForms.js
// Microsoft AJAX ASP.NET WebForms Framework.


Type.registerNamespace('Sys.WebForms');


Sys.WebForms.BeginRequestEventArgs = function Sys$WebForms$BeginRequestEventArgs(request, postBackElement) {
    /// <param name="request" type="Sys.Net.WebRequest"></param>
    /// <param name="postBackElement" domElement="true"></param>
    var e = Function._validateParams(arguments, [
        { name: "request", type: Sys.Net.WebRequest },
        { name: "postBackElement", domElement: true }
    ]);
    if (e) throw e;


    Sys.WebForms.BeginRequestEventArgs.initializeBase(this);
    this._request = request;
    this._postBackElement = postBackElement;
}


function Sys$WebForms$BeginRequestEventArgs$get_postBackElement() {
    /// <value domElement="true"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._postBackElement;
}

function Sys$WebForms$BeginRequestEventArgs$get_request() {
    /// <value type="Sys.Net.WebRequest"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._request;
}
Sys.WebForms.BeginRequestEventArgs.prototype = {
    get_postBackElement: Sys$WebForms$BeginRequestEventArgs$get_postBackElement,

    get_request: Sys$WebForms$BeginRequestEventArgs$get_request
}

Sys.WebForms.BeginRequestEventArgs.registerClass('Sys.WebForms.BeginRequestEventArgs', Sys.EventArgs);

Sys.WebForms.EndRequestEventArgs = function Sys$WebForms$EndRequestEventArgs(error, dataItems, response) {
    /// <param name="error" type="Error" mayBeNull="true"></param>
    /// <param name="dataItems" type="Object" mayBeNull="true"></param>
    /// <param name="response" type="Sys.Net.WebRequestExecutor"></param>
    var e = Function._validateParams(arguments, [
        { name: "error", type: Error, mayBeNull: true },
        { name: "dataItems", type: Object, mayBeNull: true },
        { name: "response", type: Sys.Net.WebRequestExecutor }
    ]);
    if (e) throw e;


    Sys.WebForms.EndRequestEventArgs.initializeBase(this);
    this._errorHandled = false;
    this._error = error;
    this._dataItems = dataItems || new Object();
    this._response = response;
}


function Sys$WebForms$EndRequestEventArgs$get_dataItems() {
    /// <value type="Object"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._dataItems;
}

function Sys$WebForms$EndRequestEventArgs$get_error() {
    /// <value type="Error"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._error;
}

function Sys$WebForms$EndRequestEventArgs$get_errorHandled() {
    /// <value type="Boolean"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._errorHandled;
}
function Sys$WebForms$EndRequestEventArgs$set_errorHandled(value) {
    var e = Function._validateParams(arguments, [{ name: "value", type: Boolean}]);
    if (e) throw e;

    this._errorHandled = value;
}

function Sys$WebForms$EndRequestEventArgs$get_response() {
    /// <value type="Sys.Net.WebRequestExecutor"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._response;
}
Sys.WebForms.EndRequestEventArgs.prototype = {
    get_dataItems: Sys$WebForms$EndRequestEventArgs$get_dataItems,

    get_error: Sys$WebForms$EndRequestEventArgs$get_error,

    get_errorHandled: Sys$WebForms$EndRequestEventArgs$get_errorHandled,
    set_errorHandled: Sys$WebForms$EndRequestEventArgs$set_errorHandled,

    get_response: Sys$WebForms$EndRequestEventArgs$get_response
}

Sys.WebForms.EndRequestEventArgs.registerClass('Sys.WebForms.EndRequestEventArgs', Sys.EventArgs);

Sys.WebForms.InitializeRequestEventArgs = function Sys$WebForms$InitializeRequestEventArgs(request, postBackElement) {
    /// <param name="request" type="Sys.Net.WebRequest"></param>
    /// <param name="postBackElement" domElement="true"></param>
    var e = Function._validateParams(arguments, [
        { name: "request", type: Sys.Net.WebRequest },
        { name: "postBackElement", domElement: true }
    ]);
    if (e) throw e;


    Sys.WebForms.InitializeRequestEventArgs.initializeBase(this);
    this._request = request;
    this._postBackElement = postBackElement;
}


function Sys$WebForms$InitializeRequestEventArgs$get_postBackElement() {
    /// <value domElement="true"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._postBackElement;
}

function Sys$WebForms$InitializeRequestEventArgs$get_request() {
    /// <value type="Sys.Net.WebRequest"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._request;
}
Sys.WebForms.InitializeRequestEventArgs.prototype = {
    get_postBackElement: Sys$WebForms$InitializeRequestEventArgs$get_postBackElement,

    get_request: Sys$WebForms$InitializeRequestEventArgs$get_request
}

Sys.WebForms.InitializeRequestEventArgs.registerClass('Sys.WebForms.InitializeRequestEventArgs', Sys.CancelEventArgs);

Sys.WebForms.PageLoadedEventArgs = function Sys$WebForms$PageLoadedEventArgs(panelsUpdated, panelsCreated, dataItems) {
    /// <param name="panelsUpdated" type="Array"></param>
    /// <param name="panelsCreated" type="Array"></param>
    /// <param name="dataItems" type="Object" mayBeNull="true"></param>
    var e = Function._validateParams(arguments, [
        { name: "panelsUpdated", type: Array },
        { name: "panelsCreated", type: Array },
        { name: "dataItems", type: Object, mayBeNull: true }
    ]);
    if (e) throw e;

    Sys.WebForms.PageLoadedEventArgs.initializeBase(this);

    this._panelsUpdated = panelsUpdated;
    this._panelsCreated = panelsCreated;
    this._dataItems = dataItems || new Object();
}


function Sys$WebForms$PageLoadedEventArgs$get_dataItems() {
    /// <value type="Object"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._dataItems;
}

function Sys$WebForms$PageLoadedEventArgs$get_panelsCreated() {
    /// <value type="Array"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._panelsCreated;
}

function Sys$WebForms$PageLoadedEventArgs$get_panelsUpdated() {
    /// <value type="Array"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._panelsUpdated;
}
Sys.WebForms.PageLoadedEventArgs.prototype = {
    get_dataItems: Sys$WebForms$PageLoadedEventArgs$get_dataItems,

    get_panelsCreated: Sys$WebForms$PageLoadedEventArgs$get_panelsCreated,

    get_panelsUpdated: Sys$WebForms$PageLoadedEventArgs$get_panelsUpdated
}

Sys.WebForms.PageLoadedEventArgs.registerClass('Sys.WebForms.PageLoadedEventArgs', Sys.EventArgs);

Sys.WebForms.PageLoadingEventArgs = function Sys$WebForms$PageLoadingEventArgs(panelsUpdating, panelsDeleting, dataItems) {
    /// <param name="panelsUpdating" type="Array"></param>
    /// <param name="panelsDeleting" type="Array"></param>
    /// <param name="dataItems" type="Object" mayBeNull="true"></param>
    var e = Function._validateParams(arguments, [
        { name: "panelsUpdating", type: Array },
        { name: "panelsDeleting", type: Array },
        { name: "dataItems", type: Object, mayBeNull: true }
    ]);
    if (e) throw e;

    Sys.WebForms.PageLoadingEventArgs.initializeBase(this);

    this._panelsUpdating = panelsUpdating;
    this._panelsDeleting = panelsDeleting;
    this._dataItems = dataItems || new Object();
}


function Sys$WebForms$PageLoadingEventArgs$get_dataItems() {
    /// <value type="Object"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._dataItems;
}

function Sys$WebForms$PageLoadingEventArgs$get_panelsDeleting() {
    /// <value type="Array"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._panelsDeleting;
}

function Sys$WebForms$PageLoadingEventArgs$get_panelsUpdating() {
    /// <value type="Array"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._panelsUpdating;
}
Sys.WebForms.PageLoadingEventArgs.prototype = {
    get_dataItems: Sys$WebForms$PageLoadingEventArgs$get_dataItems,

    get_panelsDeleting: Sys$WebForms$PageLoadingEventArgs$get_panelsDeleting,

    get_panelsUpdating: Sys$WebForms$PageLoadingEventArgs$get_panelsUpdating
}

Sys.WebForms.PageLoadingEventArgs.registerClass('Sys.WebForms.PageLoadingEventArgs', Sys.EventArgs);
Sys.WebForms.PageRequestManager = function Sys$WebForms$PageRequestManager() {
    this._form = null;
    this._updatePanelIDs = null;
    this._updatePanelClientIDs = null;
    this._oldUpdatePanelIDs = null;
    this._childUpdatePanelIDs = null;
    this._panelsToRefreshIDs = null;
    this._updatePanelHasChildrenAsTriggers = null;
    this._asyncPostBackControlIDs = null;
    this._asyncPostBackControlClientIDs = null;
    this._postBackControlIDs = null;
    this._postBackControlClientIDs = null;
    this._scriptManagerID = null;
    this._pageLoadedHandler = null;

    this._additionalInput = null;
    this._onsubmit = null;
    this._onSubmitStatements = [];
    this._originalDoPostBack = null;
    this._postBackSettings = null;
    this._request = null;
    this._onFormSubmitHandler = null;
    this._onFormElementClickHandler = null;
    this._onWindowUnloadHandler = null;
    this._asyncPostBackTimeout = null;

    this._controlIDToFocus = null;
    this._scrollPosition = null;
    this._dataItems = null;
    this._response = null;
    this._processingRequest = false;
    this._scriptDisposes = {};
}



function Sys$WebForms$PageRequestManager$_get_eventHandlerList() {
    if (!this._events) {
        this._events = new Sys.EventHandlerList();
    }
    return this._events;
}

function Sys$WebForms$PageRequestManager$get_isInAsyncPostBack() {
    /// <value type="Boolean"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._request !== null;
}


function Sys$WebForms$PageRequestManager$add_beginRequest(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().addHandler("beginRequest", handler);
}
function Sys$WebForms$PageRequestManager$remove_beginRequest(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().removeHandler("beginRequest", handler);
}

function Sys$WebForms$PageRequestManager$add_endRequest(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().addHandler("endRequest", handler);
}
function Sys$WebForms$PageRequestManager$remove_endRequest(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().removeHandler("endRequest", handler);
}

function Sys$WebForms$PageRequestManager$add_initializeRequest(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().addHandler("initializeRequest", handler);
}
function Sys$WebForms$PageRequestManager$remove_initializeRequest(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().removeHandler("initializeRequest", handler);
}

function Sys$WebForms$PageRequestManager$add_pageLoaded(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().addHandler("pageLoaded", handler);
}
function Sys$WebForms$PageRequestManager$remove_pageLoaded(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().removeHandler("pageLoaded", handler);
}

function Sys$WebForms$PageRequestManager$add_pageLoading(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().addHandler("pageLoading", handler);
}
function Sys$WebForms$PageRequestManager$remove_pageLoading(handler) {
    var e = Function._validateParams(arguments, [{ name: "handler", type: Function}]);
    if (e) throw e;

    this._get_eventHandlerList().removeHandler("pageLoading", handler);
}

function Sys$WebForms$PageRequestManager$abortPostBack() {
    if (!this._processingRequest && this._request) {
        this._request.get_executor().abort();
        this._request = null;
    }
}

function Sys$WebForms$PageRequestManager$_createPageRequestManagerTimeoutError() {
    var displayMessage = "Sys.WebForms.PageRequestManagerTimeoutException: " + Sys.WebForms.Res.PRM_TimeoutError;
    var e = Error.create(displayMessage, { name: 'Sys.WebForms.PageRequestManagerTimeoutException' });
    e.popStackFrame();
    return e;
}

function Sys$WebForms$PageRequestManager$_createPageRequestManagerServerError(httpStatusCode, message) {
    var displayMessage = message || ("Sys.WebForms.PageRequestManagerServerErrorException: " + String.format(Sys.WebForms.Res.PRM_ServerError, httpStatusCode));
    var e = Error.create(displayMessage, {
        name: 'Sys.WebForms.PageRequestManagerServerErrorException',
        httpStatusCode: httpStatusCode
    });
    e.popStackFrame();
    return e;
}

function Sys$WebForms$PageRequestManager$_createPageRequestManagerParserError(parserErrorMessage) {
    var displayMessage = "Sys.WebForms.PageRequestManagerParserErrorException: " + String.format(Sys.WebForms.Res.PRM_ParserError, parserErrorMessage);
    var e = Error.create(displayMessage, { name: 'Sys.WebForms.PageRequestManagerParserErrorException' });
    e.popStackFrame();
    return e;
}

function Sys$WebForms$PageRequestManager$_createPostBackSettings(async, panelID, sourceElement) {

    return { async: async, panelID: panelID, sourceElement: sourceElement };
}

function Sys$WebForms$PageRequestManager$_convertToClientIDs(source, destinationIDs, destinationClientIDs) {
    if (source) {
        for (var i = 0; i < source.length; i++) {
            Array.add(destinationIDs, source[i]);
            Array.add(destinationClientIDs, this._uniqueIDToClientID(source[i]));
        }
    }
}

function Sys$WebForms$PageRequestManager$_decodeString(encodedValue) {
    return encodedValue.replace(/\\\u00FF\\/g, "\u0000").replace(/\u00FF\u00FF/g, "\u00FF");
}

function Sys$WebForms$PageRequestManager$_destroyTree(element) {
    if (element.nodeType === 1) {
        var childNodes = element.childNodes;
        for (var i = childNodes.length - 1; i >= 0; i--) {
            var node = childNodes[i];
            if (node.nodeType === 1) {
                if (node.dispose && typeof (node.dispose) === "function") {
                    node.dispose();
                }
                else if (node.control && typeof (node.control.dispose) === "function") {
                    node.control.dispose();
                }
                var behaviors = Sys.UI.Behavior.getBehaviors(node);
                for (var j = behaviors.length - 1; j >= 0; j--) {
                    behaviors[j].dispose();
                }
                this._destroyTree(node);
            }
        }
    }
}

function Sys$WebForms$PageRequestManager$dispose() {
    if (this._form) {
        Sys.UI.DomEvent.removeHandler(this._form, 'submit', this._onFormSubmitHandler);
        Sys.UI.DomEvent.removeHandler(this._form, 'click', this._onFormElementClickHandler);
        Sys.UI.DomEvent.removeHandler(window, 'unload', this._onWindowUnloadHandler);
        Sys.UI.DomEvent.removeHandler(window, 'load', this._pageLoadedHandler);
    }

    if (this._originalDoPostBack) {
        window.__doPostBack = this._originalDoPostBack;
        this._originalDoPostBack = null;
    }

    this._form = null;
    this._updatePanelIDs = null;
    this._oldUpdatePanelIDs = null;
    this._childUpdatePanelIDs = null;
    this._updatePanelClientIDs = null;
    this._asyncPostBackControlIDs = null;
    this._asyncPostBackControlClientIDs = null;
    this._postBackControlIDs = null;
    this._postBackControlClientIDs = null;
    this._asyncPostBackTimeout = null;
    this._scrollPosition = null;
    this._dataItems = null;
}


function Sys$WebForms$PageRequestManager$_doPostBack(eventTarget, eventArgument) {
    this._additionalInput = null;

    var form = this._form;
    if (form.action !== form._initialAction) {
        this._postBackSettings = this._createPostBackSettings(false, null, null);
    }
    else {
        var clientID = this._uniqueIDToClientID(eventTarget);
        var postBackElement = document.getElementById(clientID);
        if (!postBackElement) {
            if (Array.contains(this._asyncPostBackControlIDs, eventTarget)) {
                this._postBackSettings = this._createPostBackSettings(true, this._scriptManagerID + '|' + eventTarget, null);
            }
            else {
                if (Array.contains(this._postBackControlIDs, eventTarget)) {
                    this._postBackSettings = this._createPostBackSettings(false, null, null);
                }
                else {
                    var nearestUniqueIDMatch = this._findNearestElement(eventTarget);
                    if (nearestUniqueIDMatch) {
                        this._postBackSettings = this._getPostBackSettings(nearestUniqueIDMatch, eventTarget);
                    }
                    else {
                        this._postBackSettings = this._createPostBackSettings(false, null, null);
                    }
                }
            }
        }
        else {
            this._postBackSettings = this._getPostBackSettings(postBackElement, eventTarget);
        }
    }

    if (!this._postBackSettings.async) {
        form.onsubmit = this._onsubmit;
        this._originalDoPostBack(eventTarget, eventArgument);
        form.onsubmit = null;
        return;
    }

    form.__EVENTTARGET.value = eventTarget;
    form.__EVENTARGUMENT.value = eventArgument;
    this._onFormSubmit();
}

function Sys$WebForms$PageRequestManager$_elementContains(container, element) {
    while (element) {
        if (element === container) {
            return true;
        }
        element = element.parentNode;
    }
    return false;
}

function Sys$WebForms$PageRequestManager$_endPostBack(error, response) {
    this._processingRequest = false;

    this._request = null;
    this._additionalInput = null;

    var handler = this._get_eventHandlerList().getHandler("endRequest");
    var errorHandled = false;
    if (handler) {
        var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, this._dataItems, response);
        handler(this, eventArgs);
        errorHandled = eventArgs.get_errorHandled();
    }
    this._dataItems = null;
    if (error && !errorHandled) {
        alert(error.message);
    }
}



function Sys$WebForms$PageRequestManager$_findNearestElement(uniqueID) {
    while (uniqueID.length > 0) {
        var clientID = this._uniqueIDToClientID(uniqueID);
        var element = document.getElementById(clientID);
        if (element) {
            return element;
        }
        var indexOfLastDollar = uniqueID.lastIndexOf('$');
        if (indexOfLastDollar === -1) {
            return null;
        }
        uniqueID = uniqueID.substring(0, indexOfLastDollar);
    }
    return null;
}

function Sys$WebForms$PageRequestManager$_findText(text, location) {
    var startIndex = Math.max(0, location - 20);
    var endIndex = Math.min(text.length, location + 20);
    return text.substring(startIndex, endIndex);
}

function Sys$WebForms$PageRequestManager$_getPageLoadedEventArgs(initialLoad) {

    var updated = [];
    var created = [];

    var oldIDs = this._oldUpdatePanelIDs || []; var newIDs = this._updatePanelIDs; var childIDs = this._childUpdatePanelIDs || []; var refreshedIDs = this._panelsToRefreshIDs || [];
    for (var i = 0; i < refreshedIDs.length; i++) {
        Array.add(updated, document.getElementById(this._uniqueIDToClientID(refreshedIDs[i])));
    }

    for (var i = 0; i < newIDs.length; i++) {
        if (initialLoad || Array.indexOf(childIDs, newIDs[i]) !== -1) {
            Array.add(created, document.getElementById(this._uniqueIDToClientID(newIDs[i])));
        }
    }

    return new Sys.WebForms.PageLoadedEventArgs(updated, created, this._dataItems);
}

function Sys$WebForms$PageRequestManager$_getPageLoadingEventArgs() {

    var updated = [];
    var deleted = [];

    var oldIDs = this._oldUpdatePanelIDs;
    var newIDs = this._updatePanelIDs;
    var childIDs = this._childUpdatePanelIDs;
    var refreshedIDs = this._panelsToRefreshIDs;

    for (var i = 0; i < refreshedIDs.length; i++) {
        Array.add(updated, document.getElementById(this._uniqueIDToClientID(refreshedIDs[i])));
    }

    for (var i = 0; i < oldIDs.length; i++) {
        if (Array.indexOf(refreshedIDs, oldIDs[i]) === -1 &&
                (Array.indexOf(newIDs, oldIDs[i]) === -1 || Array.indexOf(childIDs, oldIDs[i]) > -1)) {
            Array.add(deleted, document.getElementById(this._uniqueIDToClientID(oldIDs[i])));
        }
    }

    return new Sys.WebForms.PageLoadingEventArgs(updated, deleted, this._dataItems);
}

function Sys$WebForms$PageRequestManager$_getPostBackSettings(element, elementUniqueID) {


    var originalElement = element;

    var proposedSettings = null;

    while (element) {
        if (element.id) {
            if (!proposedSettings && Array.contains(this._asyncPostBackControlClientIDs, element.id)) {
                proposedSettings = this._createPostBackSettings(true, this._scriptManagerID + '|' + elementUniqueID, originalElement);
            }
            else {
                if (!proposedSettings && Array.contains(this._postBackControlClientIDs, element.id)) {
                    return this._createPostBackSettings(false, null, null);
                }
                else {
                    var indexOfPanel = Array.indexOf(this._updatePanelClientIDs, element.id);
                    if (indexOfPanel !== -1) {
                        if (this._updatePanelHasChildrenAsTriggers[indexOfPanel]) {

                            return this._createPostBackSettings(true, this._updatePanelIDs[indexOfPanel] + '|' + elementUniqueID, originalElement);
                        }
                        else {
                            return this._createPostBackSettings(true, this._scriptManagerID + '|' + elementUniqueID, originalElement);
                        }
                    }
                }
            }

            if (!proposedSettings && this._matchesParentIDInList(element.id, this._asyncPostBackControlClientIDs)) {
                proposedSettings = this._createPostBackSettings(true, this._scriptManagerID + '|' + elementUniqueID, originalElement);
            }
            else {
                if (!proposedSettings && this._matchesParentIDInList(element.id, this._postBackControlClientIDs)) {
                    return this._createPostBackSettings(false, null, null);
                }
            }
        }

        element = element.parentNode;
    }

    if (!proposedSettings) {
        return this._createPostBackSettings(false, null, null);
    }
    else {
        return proposedSettings;
    }
}

function Sys$WebForms$PageRequestManager$_getScrollPosition() {
    var d = document.documentElement;
    if (d && (this._validPosition(d.scrollLeft) || this._validPosition(d.scrollTop))) {
        return {
            x: d.scrollLeft,
            y: d.scrollTop
        };
    }
    else {
        d = document.body;
        if (d && (this._validPosition(d.scrollLeft) || this._validPosition(d.scrollTop))) {
            return {
                x: d.scrollLeft,
                y: d.scrollTop
            };
        }
        else {
            if (this._validPosition(window.pageXOffset) || this._validPosition(window.pageYOffset)) {
                return {
                    x: window.pageXOffset,
                    y: window.pageYOffset
                };
            }
            else {
                return {
                    x: 0,
                    y: 0
                };
            }
        }
    }
}

function Sys$WebForms$PageRequestManager$_initializeInternal(scriptManagerID, formElement) {
    this._scriptManagerID = scriptManagerID;

    this._form = formElement;


    this._form._initialAction = this._form.action;

    this._onsubmit = this._form.onsubmit;
    this._form.onsubmit = null;
    this._onFormSubmitHandler = Function.createDelegate(this, this._onFormSubmit);
    this._onFormElementClickHandler = Function.createDelegate(this, this._onFormElementClick);
    this._onWindowUnloadHandler = Function.createDelegate(this, this._onWindowUnload);
    Sys.UI.DomEvent.addHandler(this._form, 'submit', this._onFormSubmitHandler);
    Sys.UI.DomEvent.addHandler(this._form, 'click', this._onFormElementClickHandler);
    Sys.UI.DomEvent.addHandler(window, 'unload', this._onWindowUnloadHandler);

    this._originalDoPostBack = window.__doPostBack;
    if (this._originalDoPostBack) {
        window.__doPostBack = Function.createDelegate(this, this._doPostBack);
    }

    this._pageLoadedHandler = Function.createDelegate(this, this._pageLoadedInitialLoad);
    Sys.UI.DomEvent.addHandler(window, 'load', this._pageLoadedHandler);
}

function Sys$WebForms$PageRequestManager$_matchesParentIDInList(clientID, parentIDList) {
    for (var i = 0; i < parentIDList.length; i++) {
        if (clientID.startsWith(parentIDList[i] + "_")) {
            return true;
        }
    }
    return false;
}

function Sys$WebForms$PageRequestManager$_onFormElementClick(evt) {
    var element = evt.target;
    if (element.disabled) {
        return;
    }

    this._postBackSettings = this._getPostBackSettings(element, element.name);


    if (element.name) {
        if (element.tagName === 'INPUT') {
            var type = element.type;
            if (type === 'submit') {
                this._additionalInput = element.name + '=' + encodeURIComponent(element.value);
            }
            else if (type === 'image') {
                var x = evt.offsetX;
                var y = evt.offsetY;
                this._additionalInput = element.name + '.x=' + x + '&' + element.name + '.y=' + y;
            }
        }
        else if ((element.tagName === 'BUTTON') && (element.name.length !== 0) && (element.type === 'submit')) {
            this._additionalInput = element.name + '=' + encodeURIComponent(element.value);
        }
    }
}

function Sys$WebForms$PageRequestManager$_onFormSubmit(evt) {
    var continueSubmit = true;

    if (this._onsubmit) {
        continueSubmit = this._onsubmit();
    }

    if (continueSubmit) {
        for (var i = 0; i < this._onSubmitStatements.length; i++) {
            if (!this._onSubmitStatements[i]()) {
                continueSubmit = false;
                break;
            }
        }
    }

    if (!continueSubmit) {
        if (evt) {
            evt.preventDefault();
        }
        return;
    }

    var form = this._form;
    if (form.action !== form._initialAction) {
        return;
    }

    if (!this._postBackSettings.async) {
        return;
    }

    var formBody = new Sys.StringBuilder();
    formBody.append(this._scriptManagerID + '=' + this._postBackSettings.panelID + '&');

    var count = form.elements.length;
    for (var i = 0; i < count; i++) {
        var element = form.elements[i];
        var name = element.name;
        if (typeof (name) === "undefined" || (name === null) || (name.length === 0)) {
            continue;
        }

        var tagName = element.tagName;

        if (tagName === 'INPUT') {
            var type = element.type;
            if ((type === 'text') ||
                    (type === 'password') ||
                    (type === 'hidden') ||
                    (((type === 'checkbox') || (type === 'radio')) && element.checked)) {
                formBody.append(name);
                formBody.append('=');
                formBody.append(encodeURIComponent(element.value));
                formBody.append('&');
            }
        }
        else if (tagName === 'SELECT') {
            var optionCount = element.options.length;
            for (var j = 0; j < optionCount; j++) {
                var option = element.options[j];
                if (option.selected) {
                    formBody.append(name);
                    formBody.append('=');
                    formBody.append(encodeURIComponent(option.value));
                    formBody.append('&');
                }
            }
        }
        else if (tagName === 'TEXTAREA') {
            formBody.append(name);
            formBody.append('=');
            formBody.append(encodeURIComponent(element.value));
            formBody.append('&');
        }
    }

    if (this._additionalInput) {
        formBody.append(this._additionalInput);
        this._additionalInput = null;
    }

    var request = new Sys.Net.WebRequest();
    request.set_url(form.action);
    request.get_headers()['X-MicrosoftAjax'] = 'Delta=true';
    request.get_headers()['Cache-Control'] = 'no-cache';
    request.set_timeout(this._asyncPostBackTimeout);
    request.add_completed(Function.createDelegate(this, this._onFormSubmitCompleted));
    request.set_body(formBody.toString());

    var handler = this._get_eventHandlerList().getHandler("initializeRequest");
    if (handler) {
        var eventArgs = new Sys.WebForms.InitializeRequestEventArgs(request, this._postBackSettings.sourceElement);
        handler(this, eventArgs);
        continueSubmit = !eventArgs.get_cancel();
    }

    if (!continueSubmit) {
        if (evt) {
            evt.preventDefault();
        }
        return;
    }

    this._scrollPosition = this._getScrollPosition();


    this.abortPostBack();

    handler = this._get_eventHandlerList().getHandler("beginRequest");
    if (handler) {
        var eventArgs = new Sys.WebForms.BeginRequestEventArgs(request, this._postBackSettings.sourceElement);
        handler(this, eventArgs);
    }

    this._request = request;
    request.invoke();

    if (evt) {
        evt.preventDefault();
    }
}

function Sys$WebForms$PageRequestManager$_onFormSubmitCompleted(sender, eventArgs) {
    this._processingRequest = true;

    var delimitByLengthDelimiter = '|';

    if (sender.get_timedOut()) {
        this._endPostBack(this._createPageRequestManagerTimeoutError(), sender);
        return;
    }

    if (sender.get_aborted()) {
        this._endPostBack(null, sender);
        return;
    }

    if (!this._request || sender.get_webRequest() !== this._request) {
        return;
    }

    var errorMessage;
    var delta = [];

    if (sender.get_statusCode() !== 200) {
        this._endPostBack(this._createPageRequestManagerServerError(sender.get_statusCode()), sender);
        return;
    }

    var reply = sender.get_responseData();
    var delimiterIndex, len, type, id, content;
    var replyIndex = 0;
    var parserErrorDetails = null;

    while (replyIndex < reply.length) {
        delimiterIndex = reply.indexOf(delimitByLengthDelimiter, replyIndex);
        if (delimiterIndex === -1) {
            parserErrorDetails = this._findText(reply, replyIndex);
            break;
        }
        len = parseInt(reply.substring(replyIndex, delimiterIndex), 10);
        if ((len % 1) !== 0) {
            parserErrorDetails = this._findText(reply, replyIndex);
            break;
        }
        replyIndex = delimiterIndex + 1;

        delimiterIndex = reply.indexOf(delimitByLengthDelimiter, replyIndex);
        if (delimiterIndex === -1) {
            parserErrorDetails = this._findText(reply, replyIndex);
            break;
        }
        type = reply.substring(replyIndex, delimiterIndex);
        replyIndex = delimiterIndex + 1;

        delimiterIndex = reply.indexOf(delimitByLengthDelimiter, replyIndex);
        if (delimiterIndex === -1) {
            parserErrorDetails = this._findText(reply, replyIndex);
            break;
        }
        id = reply.substring(replyIndex, delimiterIndex);
        replyIndex = delimiterIndex + 1;

        if ((replyIndex + len) >= reply.length) {
            parserErrorDetails = this._findText(reply, reply.length);
            break;
        }
        content = this._decodeString(reply.substr(replyIndex, len));
        replyIndex += len;

        if (reply.charAt(replyIndex) !== delimitByLengthDelimiter) {
            parserErrorDetails = this._findText(reply, replyIndex);
            break;
        }

        replyIndex++;

        Array.add(delta, { type: type, id: id, content: content });
    }

    if (parserErrorDetails) {
        this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_ParserErrorDetails, parserErrorDetails)), sender);
        return;
    }


    var updatePanelNodes = [];
    var hiddenFieldNodes = [];
    var arrayDeclarationNodes = [];
    var scriptBlockNodes = [];
    var expandoNodes = [];
    var onSubmitNodes = [];
    var dataItemNodes = [];
    var dataItemJsonNodes = [];
    var scriptDisposeNodes = [];
    var asyncPostBackControlIDsNode, postBackControlIDsNode,
            updatePanelIDsNode, asyncPostBackTimeoutNode,
            childUpdatePanelIDsNode, panelsToRefreshNode, formActionNode;

    for (var i = 0; i < delta.length; i++) {
        var deltaNode = delta[i];
        switch (deltaNode.type) {
            case "updatePanel":
                Array.add(updatePanelNodes, deltaNode);
                break;
            case "hiddenField":
                Array.add(hiddenFieldNodes, deltaNode);
                break;
            case "arrayDeclaration":
                Array.add(arrayDeclarationNodes, deltaNode);
                break;
            case "scriptBlock":
                Array.add(scriptBlockNodes, deltaNode);
                break;
            case "expando":
                Array.add(expandoNodes, deltaNode);
                break;
            case "onSubmit":
                Array.add(onSubmitNodes, deltaNode);
                break;
            case "asyncPostBackControlIDs":
                asyncPostBackControlIDsNode = deltaNode;
                break;
            case "postBackControlIDs":
                postBackControlIDsNode = deltaNode;
                break;
            case "updatePanelIDs":
                updatePanelIDsNode = deltaNode;
                break;
            case "asyncPostBackTimeout":
                asyncPostBackTimeoutNode = deltaNode;
                break;
            case "childUpdatePanelIDs":
                childUpdatePanelIDsNode = deltaNode;
                break;
            case "panelsToRefreshIDs":
                panelsToRefreshNode = deltaNode;
                break;
            case "formAction":
                formActionNode = deltaNode;
                break;
            case "dataItem":
                Array.add(dataItemNodes, deltaNode);
                break;
            case "dataItemJson":
                Array.add(dataItemJsonNodes, deltaNode);
                break;
            case "scriptDispose":
                Array.add(scriptDisposeNodes, deltaNode);
                break;
            case "pageRedirect":
                window.location.href = deltaNode.content;
                return;
            case "error":
                this._endPostBack(this._createPageRequestManagerServerError(Number.parseInvariant(deltaNode.id), deltaNode.content), sender);
                return;
            case "pageTitle":
                document.title = deltaNode.content;
                break;
            case "focus":
                this._controlIDToFocus = deltaNode.content;
                break;
            default:
                this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_UnknownToken, deltaNode.type)), sender);
                return;
        }
    }

    var i;

    if (asyncPostBackControlIDsNode && postBackControlIDsNode &&
            updatePanelIDsNode && panelsToRefreshNode &&
            asyncPostBackTimeoutNode && childUpdatePanelIDsNode) {

        this._oldUpdatePanelIDs = this._updatePanelIDs;
        var childUpdatePanelIDsString = childUpdatePanelIDsNode.content;
        this._childUpdatePanelIDs = childUpdatePanelIDsString.length ? childUpdatePanelIDsString.split(',') : [];

        var asyncPostBackControlIDsArray = this._splitNodeIntoArray(asyncPostBackControlIDsNode);
        var postBackControlIDsArray = this._splitNodeIntoArray(postBackControlIDsNode);
        var updatePanelIDsArray = this._splitNodeIntoArray(updatePanelIDsNode);
        this._panelsToRefreshIDs = this._splitNodeIntoArray(panelsToRefreshNode);

        for (i = 0; i < this._panelsToRefreshIDs.length; i++) {
            var panelClientID = this._uniqueIDToClientID(this._panelsToRefreshIDs[i]);
            if (!document.getElementById(panelClientID)) {
                this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel, panelClientID)), sender);
                return;
            }
        }

        var asyncPostBackTimeout = asyncPostBackTimeoutNode.content;
        this._updateControls(updatePanelIDsArray, asyncPostBackControlIDsArray, postBackControlIDsArray, asyncPostBackTimeout);
    }

    this._dataItems = {};
    for (i = 0; i < dataItemNodes.length; i++) {
        var dataItemNode = dataItemNodes[i];
        this._dataItems[dataItemNode.id] = dataItemNode.content;
    }
    for (i = 0; i < dataItemJsonNodes.length; i++) {
        var dataItemJsonNode = dataItemJsonNodes[i];
        this._dataItems[dataItemJsonNode.id] = eval(dataItemJsonNode.content);
    }


    var handler = this._get_eventHandlerList().getHandler("pageLoading");
    if (handler) {
        handler(this, this._getPageLoadingEventArgs());
    }


    if (formActionNode) {
        this._form.action = formActionNode.content;
        this._form._initialAction = this._form.action;
    }

    for (i = 0; i < updatePanelNodes.length; i++) {
        var deltaUpdatePanel = updatePanelNodes[i];

        var deltaPanelID = deltaUpdatePanel.id;
        var deltaPanelRendering = deltaUpdatePanel.content;

        var updatePanelElement = document.getElementById(deltaPanelID);

        if (!updatePanelElement) {
            this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel, deltaPanelID)), sender);
            return;
        }

        this._updatePanel(updatePanelElement, deltaPanelRendering);
    }

    for (i = 0; i < scriptDisposeNodes.length; i++) {
        var disposePanelId = scriptDisposeNodes[i].id;
        var disposeScript = scriptDisposeNodes[i].content;
        this._registerDisposeScript(disposePanelId, disposeScript);
    }

    for (i = 0; i < hiddenFieldNodes.length; i++) {
        var id = hiddenFieldNodes[i].id;
        var value = hiddenFieldNodes[i].content;

        var hiddenFieldElement = document.getElementById(id);
        if (!hiddenFieldElement) {
            hiddenFieldElement = document.createElement('input');
            hiddenFieldElement.id = id;
            hiddenFieldElement.name = id;
            hiddenFieldElement.type = 'hidden';
            this._form.appendChild(hiddenFieldElement);
        }
        hiddenFieldElement.value = value;
    }

    var arrayScript = '';
    for (i = 0; i < arrayDeclarationNodes.length; i++) {
        arrayScript += "Sys.WebForms.PageRequestManager._addArrayElement('" + arrayDeclarationNodes[i].id + "', " + arrayDeclarationNodes[i].content + ");\r\n";
    }

    var expandoScript = '';
    for (i = 0; i < expandoNodes.length; i++) {
        var propertyReference = expandoNodes[i].id;
        var propertyValue = expandoNodes[i].content;
        expandoScript += propertyReference + " = " + propertyValue + "\r\n";
    }

    Sys._ScriptLoader.readLoadedScripts();

    Sys.Application.beginCreateComponents();

    var scriptLoader = Sys._ScriptLoader.getInstance();

    if (arrayScript.length) {
        scriptLoader.queueScriptBlock(arrayScript);
    }
    if (expandoScript.length) {
        scriptLoader.queueScriptBlock(expandoScript);
    }

    for (i = 0; i < scriptBlockNodes.length; i++) {
        var scriptBlockType = scriptBlockNodes[i].id;
        switch (scriptBlockType) {
            case "ScriptContentNoTags":
                scriptLoader.queueScriptBlock(scriptBlockNodes[i].content);
                break;
            case "ScriptContentWithTags":
                var scriptTagAttributes;
                eval("scriptTagAttributes = " + scriptBlockNodes[i].content);

                if (scriptTagAttributes.src && Sys._ScriptLoader.isScriptLoaded(scriptTagAttributes.src)) {
                    continue;
                }

                scriptLoader.queueCustomScriptTag(scriptTagAttributes);
                break;
            case "ScriptPath":
                if (Sys._ScriptLoader.isScriptLoaded(scriptBlockNodes[i].content)) {
                    continue;
                }

                scriptLoader.queueScriptReference(scriptBlockNodes[i].content);
                break;
        }
    }

    var onSubmitStatementScript = '';
    for (var i = 0; i < onSubmitNodes.length; i++) {
        if (i === 0) {
            onSubmitStatementScript = 'Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, function() {\r\n';
        }

        onSubmitStatementScript += onSubmitNodes[i].content + "\r\n";
    }
    if (onSubmitStatementScript.length) {
        onSubmitStatementScript += "\r\nreturn true;\r\n});\r\n";
        scriptLoader.queueScriptBlock(onSubmitStatementScript);
    }

    this._response = sender;

    scriptLoader.loadScripts(0, Function.createDelegate(this, this._scriptsLoadComplete), null, null);

}

function Sys$WebForms$PageRequestManager$_onWindowUnload(evt) {
    this.dispose();
}

function Sys$WebForms$PageRequestManager$_pageLoaded(initialLoad) {
    var handler = this._get_eventHandlerList().getHandler("pageLoaded");
    if (handler) {
        handler(this, this._getPageLoadedEventArgs(initialLoad));
    }
    if (!initialLoad) {
        Sys.Application.raiseLoad();
    }
}

function Sys$WebForms$PageRequestManager$_pageLoadedInitialLoad(evt) {
    this._pageLoaded(true);
}

function Sys$WebForms$PageRequestManager$_registerDisposeScript(panelID, disposeScript) {
    if (!this._scriptDisposes[panelID]) {
        this._scriptDisposes[panelID] = [disposeScript];
    }
    else {
        Array.add(this._scriptDisposes[panelID], disposeScript);
    }
}

function Sys$WebForms$PageRequestManager$_scriptsLoadComplete() {

    if (window.__theFormPostData) {
        window.__theFormPostData = "";
    }
    if (window.__theFormPostCollection) {
        window.__theFormPostCollection = [];
    }
    if (window.WebForm_InitCallback) {
        window.WebForm_InitCallback();
    }

    if (this._scrollPosition) {
        if (window.scrollTo) {
            window.scrollTo(this._scrollPosition.x, this._scrollPosition.y);
        }
        this._scrollPosition = null;
    }

    Sys.Application.endCreateComponents();

    this._pageLoaded(false);

    this._endPostBack(null, this._response);
    this._response = null;

    if (this._controlIDToFocus) {
        var focusTarget;
        var oldContentEditableSetting;
        if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
            var targetControl = $get(this._controlIDToFocus);

            var focusTarget = targetControl;
            if (targetControl && (!WebForm_CanFocus(targetControl))) {
                focusTarget = WebForm_FindFirstFocusableChild(targetControl);
            }
            if (focusTarget && (typeof (focusTarget.contentEditable) !== "undefined")) {
                oldContentEditableSetting = focusTarget.contentEditable;
                focusTarget.contentEditable = false;
            }
            else {
                focusTarget = null;
            }
        }
        WebForm_AutoFocus(this._controlIDToFocus);
        if (focusTarget) {
            focusTarget.contentEditable = oldContentEditableSetting;
        }
        this._controlIDToFocus = null;
    }
}

function Sys$WebForms$PageRequestManager$_splitNodeIntoArray(node) {
    var str = node.content;
    var arr = str.length ? str.split(',') : [];
    return arr;
}

function Sys$WebForms$PageRequestManager$_uniqueIDToClientID(uniqueID) {
    return uniqueID.replace(/\$/g, '_');
}

function Sys$WebForms$PageRequestManager$_updateControls(updatePanelIDs, asyncPostBackControlIDs, postBackControlIDs, asyncPostBackTimeout) {
    if (updatePanelIDs) {
        this._updatePanelIDs = new Array(updatePanelIDs.length);
        this._updatePanelClientIDs = new Array(updatePanelIDs.length);
        this._updatePanelHasChildrenAsTriggers = new Array(updatePanelIDs.length);
        for (var i = 0; i < updatePanelIDs.length; i++) {
            var realPanelID = updatePanelIDs[i].substr(1);
            var childrenAsTriggers = (updatePanelIDs[i].charAt(0) === 't');

            this._updatePanelHasChildrenAsTriggers[i] = childrenAsTriggers;
            this._updatePanelIDs[i] = realPanelID;
            this._updatePanelClientIDs[i] = this._uniqueIDToClientID(realPanelID);
        }
        this._asyncPostBackTimeout = asyncPostBackTimeout * 1000;
    }
    else {
        this._updatePanelIDs = [];
        this._updatePanelClientIDs = [];
        this._updatePanelHasChildrenAsTriggers = [];
        this._asyncPostBackTimeout = 0;
    }

    this._asyncPostBackControlIDs = [];
    this._asyncPostBackControlClientIDs = [];
    this._convertToClientIDs(asyncPostBackControlIDs, this._asyncPostBackControlIDs, this._asyncPostBackControlClientIDs);

    this._postBackControlIDs = [];
    this._postBackControlClientIDs = [];
    this._convertToClientIDs(postBackControlIDs, this._postBackControlIDs, this._postBackControlClientIDs);
}

function Sys$WebForms$PageRequestManager$_updatePanel(updatePanelElement, rendering) {

    for (var updatePanelID in this._scriptDisposes) {
        if (this._elementContains(updatePanelElement, document.getElementById(updatePanelID))) {
            var disposeScripts = this._scriptDisposes[updatePanelID];
            for (var i = 0; i < disposeScripts.length; i++) {
                eval(disposeScripts[i]);
            }

            delete this._scriptDisposes[updatePanelID];
        }
    }

    this._destroyTree(updatePanelElement);

    updatePanelElement.innerHTML = rendering;
}

function Sys$WebForms$PageRequestManager$_validPosition(position) {
    return (typeof (position) !== "undefined") && (position !== null) && (position !== 0);
}
Sys.WebForms.PageRequestManager.prototype = {

    _get_eventHandlerList: Sys$WebForms$PageRequestManager$_get_eventHandlerList,

    get_isInAsyncPostBack: Sys$WebForms$PageRequestManager$get_isInAsyncPostBack,

    add_beginRequest: Sys$WebForms$PageRequestManager$add_beginRequest,
    remove_beginRequest: Sys$WebForms$PageRequestManager$remove_beginRequest,

    add_endRequest: Sys$WebForms$PageRequestManager$add_endRequest,
    remove_endRequest: Sys$WebForms$PageRequestManager$remove_endRequest,

    add_initializeRequest: Sys$WebForms$PageRequestManager$add_initializeRequest,
    remove_initializeRequest: Sys$WebForms$PageRequestManager$remove_initializeRequest,

    add_pageLoaded: Sys$WebForms$PageRequestManager$add_pageLoaded,
    remove_pageLoaded: Sys$WebForms$PageRequestManager$remove_pageLoaded,

    add_pageLoading: Sys$WebForms$PageRequestManager$add_pageLoading,
    remove_pageLoading: Sys$WebForms$PageRequestManager$remove_pageLoading,

    abortPostBack: Sys$WebForms$PageRequestManager$abortPostBack,

    _createPageRequestManagerTimeoutError: Sys$WebForms$PageRequestManager$_createPageRequestManagerTimeoutError,

    _createPageRequestManagerServerError: Sys$WebForms$PageRequestManager$_createPageRequestManagerServerError,

    _createPageRequestManagerParserError: Sys$WebForms$PageRequestManager$_createPageRequestManagerParserError,

    _createPostBackSettings: Sys$WebForms$PageRequestManager$_createPostBackSettings,

    _convertToClientIDs: Sys$WebForms$PageRequestManager$_convertToClientIDs,

    _decodeString: Sys$WebForms$PageRequestManager$_decodeString,

    _destroyTree: Sys$WebForms$PageRequestManager$_destroyTree,

    dispose: Sys$WebForms$PageRequestManager$dispose,

    _doPostBack: Sys$WebForms$PageRequestManager$_doPostBack,

    _elementContains: Sys$WebForms$PageRequestManager$_elementContains,

    _endPostBack: Sys$WebForms$PageRequestManager$_endPostBack,

    _findNearestElement: Sys$WebForms$PageRequestManager$_findNearestElement,

    _findText: Sys$WebForms$PageRequestManager$_findText,

    _getPageLoadedEventArgs: Sys$WebForms$PageRequestManager$_getPageLoadedEventArgs,

    _getPageLoadingEventArgs: Sys$WebForms$PageRequestManager$_getPageLoadingEventArgs,

    _getPostBackSettings: Sys$WebForms$PageRequestManager$_getPostBackSettings,

    _getScrollPosition: Sys$WebForms$PageRequestManager$_getScrollPosition,

    _initializeInternal: Sys$WebForms$PageRequestManager$_initializeInternal,

    _matchesParentIDInList: Sys$WebForms$PageRequestManager$_matchesParentIDInList,

    _onFormElementClick: Sys$WebForms$PageRequestManager$_onFormElementClick,

    _onFormSubmit: Sys$WebForms$PageRequestManager$_onFormSubmit,

    _onFormSubmitCompleted: Sys$WebForms$PageRequestManager$_onFormSubmitCompleted,

    _onWindowUnload: Sys$WebForms$PageRequestManager$_onWindowUnload,

    _pageLoaded: Sys$WebForms$PageRequestManager$_pageLoaded,

    _pageLoadedInitialLoad: Sys$WebForms$PageRequestManager$_pageLoadedInitialLoad,

    _registerDisposeScript: Sys$WebForms$PageRequestManager$_registerDisposeScript,

    _scriptsLoadComplete: Sys$WebForms$PageRequestManager$_scriptsLoadComplete,

    _splitNodeIntoArray: Sys$WebForms$PageRequestManager$_splitNodeIntoArray,

    _uniqueIDToClientID: Sys$WebForms$PageRequestManager$_uniqueIDToClientID,

    _updateControls: Sys$WebForms$PageRequestManager$_updateControls,

    _updatePanel: Sys$WebForms$PageRequestManager$_updatePanel,

    _validPosition: Sys$WebForms$PageRequestManager$_validPosition
}

Sys.WebForms.PageRequestManager.getInstance = function Sys$WebForms$PageRequestManager$getInstance() {
    /// <returns type="Sys.WebForms.PageRequestManager"></returns>
    if (arguments.length !== 0) throw Error.parameterCount();
    return Sys.WebForms.PageRequestManager._instance || null;
}

Sys.WebForms.PageRequestManager._addArrayElement = function Sys$WebForms$PageRequestManager$_addArrayElement(arrayName, arrayValue) {
    if (typeof (window[arrayName]) === "undefined") {
        window[arrayName] = [arrayValue];
    }
    else {
        Array.add(window[arrayName], arrayValue);
    }
}

Sys.WebForms.PageRequestManager._initialize = function Sys$WebForms$PageRequestManager$_initialize(scriptManagerID, formElement) {
    if (Sys.WebForms.PageRequestManager.getInstance()) {
        throw Error.invalidOperation(Sys.WebForms.Res.PRM_CannotRegisterTwice);
    }
    Sys.WebForms.PageRequestManager._instance = new Sys.WebForms.PageRequestManager();
    Sys.WebForms.PageRequestManager.getInstance()._initializeInternal(scriptManagerID, formElement);
}

Sys.WebForms.PageRequestManager.registerClass('Sys.WebForms.PageRequestManager');
Sys.UI._UpdateProgress = function Sys$UI$_UpdateProgress(element) {
    Sys.UI._UpdateProgress.initializeBase(this, [element]);
    this._displayAfter = 500;
    this._dynamicLayout = true;
    this._associatedUpdatePanelId = null;
    this._beginRequestHandlerDelegate = null;
    this._startDelegate = null;
    this._endRequestHandlerDelegate = null;
    this._pageRequestManager = null;
    this._timerCookie = null;
}

function Sys$UI$_UpdateProgress$get_displayAfter() {
    /// <value type="Number"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._displayAfter;
}
function Sys$UI$_UpdateProgress$set_displayAfter(value) {
    var e = Function._validateParams(arguments, [{ name: "value", type: Number}]);
    if (e) throw e;

    this._displayAfter = value;
}
function Sys$UI$_UpdateProgress$get_dynamicLayout() {
    /// <value type="Boolean"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._dynamicLayout;
}
function Sys$UI$_UpdateProgress$set_dynamicLayout(value) {
    var e = Function._validateParams(arguments, [{ name: "value", type: Boolean}]);
    if (e) throw e;

    this._dynamicLayout = value;
}
function Sys$UI$_UpdateProgress$get_associatedUpdatePanelId() {
    /// <value type="String" mayBeNull="true"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._associatedUpdatePanelId;
}
function Sys$UI$_UpdateProgress$set_associatedUpdatePanelId(value) {
    var e = Function._validateParams(arguments, [{ name: "value", type: String, mayBeNull: true}]);
    if (e) throw e;

    this._associatedUpdatePanelId = value;
}
function Sys$UI$_UpdateProgress$_handleBeginRequest(sender, arg) {
    var curElem = arg.get_postBackElement();
    var showProgress = !this._associatedUpdatePanelId;
    while (!showProgress && curElem) {
        if (curElem.id && this._associatedUpdatePanelId === curElem.id) {
            showProgress = true;
        }
        curElem = curElem.parentNode;
    }
    if (showProgress) {
        this._timerCookie = window.setTimeout(this._startDelegate, this._displayAfter);
    }
}
function Sys$UI$_UpdateProgress$_startRequest() {
    if (this._pageRequestManager.get_isInAsyncPostBack()) {
        if (this._dynamicLayout) this.get_element().style.display = 'block';
        else this.get_element().style.visibility = 'visible';
    }
    this._timerCookie = null;
}
function Sys$UI$_UpdateProgress$_handleEndRequest(sender, arg) {
    if (this._dynamicLayout) this.get_element().style.display = 'none';
    else this.get_element().style.visibility = 'hidden';
    if (this._timerCookie) {
        window.clearTimeout(this._timerCookie);
        this._timerCookie = null;
    }
}
function Sys$UI$_UpdateProgress$dispose() {
    if (this._pageRequestManager !== null) {
        this._pageRequestManager.remove_beginRequest(this._beginRequestHandlerDelegate);
        this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegate);
    }
    Sys.UI._UpdateProgress.callBaseMethod(this, "dispose");
}
function Sys$UI$_UpdateProgress$initialize() {
    Sys.UI._UpdateProgress.callBaseMethod(this, 'initialize');
    this._beginRequestHandlerDelegate = Function.createDelegate(this, this._handleBeginRequest);
    this._endRequestHandlerDelegate = Function.createDelegate(this, this._handleEndRequest);
    this._startDelegate = Function.createDelegate(this, this._startRequest);
    if (Sys.WebForms && Sys.WebForms.PageRequestManager) {
        this._pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
    }
    if (this._pageRequestManager !== null) {
        this._pageRequestManager.add_beginRequest(this._beginRequestHandlerDelegate);
        this._pageRequestManager.add_endRequest(this._endRequestHandlerDelegate);
    }
}
Sys.UI._UpdateProgress.prototype = {
    get_displayAfter: Sys$UI$_UpdateProgress$get_displayAfter,
    set_displayAfter: Sys$UI$_UpdateProgress$set_displayAfter,
    get_dynamicLayout: Sys$UI$_UpdateProgress$get_dynamicLayout,
    set_dynamicLayout: Sys$UI$_UpdateProgress$set_dynamicLayout,
    get_associatedUpdatePanelId: Sys$UI$_UpdateProgress$get_associatedUpdatePanelId,
    set_associatedUpdatePanelId: Sys$UI$_UpdateProgress$set_associatedUpdatePanelId,
    _handleBeginRequest: Sys$UI$_UpdateProgress$_handleBeginRequest,
    _startRequest: Sys$UI$_UpdateProgress$_startRequest,
    _handleEndRequest: Sys$UI$_UpdateProgress$_handleEndRequest,
    dispose: Sys$UI$_UpdateProgress$dispose,
    initialize: Sys$UI$_UpdateProgress$initialize
}
Sys.UI._UpdateProgress.registerClass('Sys.UI._UpdateProgress', Sys.UI.Control);

Type.registerNamespace('Sys.WebForms');
Sys.WebForms.Res = {
    "PRM_MissingPanel": "Could not find UpdatePanel with ID \u0027{0}\u0027. If it is being updated dynamically then it must be inside another UpdatePanel.",
    "PRM_ServerError": "An unknown error occurred while processing the request on the server. The status code returned from the server was: {0}",
    "PRM_ParserError": "The message received from the server could not be parsed.",
    "PRM_TimeoutError": "The server request timed out.",
    "PRM_CannotRegisterTwice": "The PageRequestManager cannot be initialized more than once.",
    "PRM_UnknownToken": "Unknown token: \u0027{0}\u0027.",
    "PRM_MissingPanel": "Could not find UpdatePanel with ID \u0027{0}\u0027. If it is being updated dynamically then it must be inside another UpdatePanel.",
    "PRM_ServerError": "An unknown error occurred while processing the request on the server. The status code returned from the server was: {0}",
    "PRM_ParserError": "The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.\r\nDetails: {0}",
    "PRM_TimeoutError": "The server request timed out.",
    "PRM_ParserErrorDetails": "Error parsing near \u0027{0}\u0027.",
    "PRM_CannotRegisterTwice": "The PageRequestManager cannot be initialized more than once."
};

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
