Sys.UI._ModalUpdateProgress = function Sys$UI$_ModalUpdateProgress(element) {
    Sys.UI._ModalUpdateProgress.initializeBase(this, [element]);
    this._backgroundCssClass = null;
    this._cancelControlID = null;
    this._backgroundElement = null;
    this._foregroundElement = null;
    this._cancelHandler = null;
    this._scrollHandler = null;
    this._resizeHandler = null;
    this._windowHandlersAttached = false;
    this._beginRequestHandlerDelegate = null;
    this._startDelegate = null;
    this._endRequestHandlerDelegate = null;
    this._pageRequestManager = null;
    this._timerCookie = null;
    this._saveTabIndexes = new Array();
    this._saveDisableSelect = new Array();
    this._tagWithTabIndex = new Array('A', 'AREA', 'BUTTON', 'INPUT', 'OBJECT', 'SELECT', 'TEXTAREA', 'IFRAME');
    this._disableTabsCalled = false;
}
function Sys$UI$_ModalUpdateProgress$get_backgroundCssClass() {
    /// <value type="String"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._backgroundCssClass;
}
function Sys$UI$_ModalUpdateProgress$set_backgroundCssClass(value) {
    this._backgroundCssClass = value;
}
function Sys$UI$_ModalUpdateProgress$get_cancelControlID() {
    /// <value type="String"></value>
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._cancelControlID;
}
function Sys$UI$_ModalUpdateProgress$set_cancelControlID(value) {
    this._cancelControlID = value;
}
function Sys$UI$_ModalUpdateProgress$_attachPopup() {
    if (!this._scrollHandler) {
        this._scrollHandler = Function.createDelegate(this, this._onLayout);
    }
    if (!this._resizeHandler) {
        this._resizeHandler = Function.createDelegate(this, this._onLayout);
    }
    $addHandler(window, 'resize', this._resizeHandler);
    $addHandler(window, 'scroll', this._scrollHandler);
    this._windowHandlersAttached = true;
}
function Sys$UI$_ModalUpdateProgress$_detachPopup() {
    if (this._windowHandlersAttached) {
        if (this._scrollHandler) {
            $removeHandler(window, 'scroll', this._scrollHandler);
        }
        if (this._resizeHandler) {
            $removeHandler(window, 'resize', this._resizeHandler);
        }
    }
}
function Sys$UI$_ModalUpdateProgress$_onCancel(e) {
    var element = $get(this._cancelControlID);
    if (element && !element.disabled) {
        if (this._pageRequestManager !== null) {
            this._pageRequestManager.abortPostBack();
        }
        this._hide();
        e.preventDefault();
        return false;
    }
}
function Sys$UI$_ModalUpdateProgress$_onLayout(e) {
    this._layout();
}
function Sys$UI$_ModalUpdateProgress$_layout() {
    var scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
    var scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    var clientWidth;
    if (window.innerWidth) {
        clientWidth = ((Sys.Browser.agent === Sys.Browser.Safari) ? window.innerWidth : Math.min(window.innerWidth, document.documentElement.clientWidth));
    } else {
        clientWidth = document.documentElement.clientWidth;
    }
    var clientHeight;
    if (window.innerHeight) {
        clientHeight = ((Sys.Browser.agent === Sys.Browser.Safari) ? window.innerHeight : Math.min(window.innerHeight, document.documentElement.clientHeight));
    } else {
        clientHeight = document.documentElement.clientHeight;
    }
    this._backgroundElement.style.left = scrollLeft + 'px';
    this._backgroundElement.style.top = scrollTop + 'px';
    this._backgroundElement.style.width = clientWidth + 'px';
    this._backgroundElement.style.height = clientHeight + 'px';
    this._foregroundElement.style.left = scrollLeft + ((clientWidth - this._foregroundElement.offsetWidth) / 2) + 'px';
    this._foregroundElement.style.top = scrollTop + ((clientHeight - this._foregroundElement.offsetHeight) / 2) + 'px';
}
function Sys$UI$_ModalUpdateProgress$_show() {
    this._attachPopup();
    this._backgroundElement.style.display = '';
    if (this._dynamicLayout) {
        this._foregroundElement.style.display = 'block';
    } else {
        this._foregroundElement.style.visibility = 'visible';
    }
    this._disableTabs();
    this._layout();
    this._layout();
}
function Sys$UI$_ModalUpdateProgress$_disableTabs() {
    if (!this._disableTabsCalled) {
        var i = 0;
        var tagElements;
        var tagElementsInPopUp = new Array();
        Array.clear(this._saveTabIndexes);
        for (var j = 0; j < this._tagWithTabIndex.length; j++) {
            tagElements = this._foregroundElement.getElementsByTagName(this._tagWithTabIndex[j]);
            for (var k = 0; k < tagElements.length; k++) {
                tagElementsInPopUp[i] = tagElements[k];
                i++;
            }
        }
        i = 0;
        for (var j = 0; j < this._tagWithTabIndex.length; j++) {
            tagElements = document.getElementsByTagName(this._tagWithTabIndex[j]);
            for (var k = 0; k < tagElements.length; k++) {
                if (Array.indexOf(tagElementsInPopUp, tagElements[k]) == -1) {
                    this._saveTabIndexes[i] = { tag: tagElements[k], index: tagElements[k].tabIndex };
                    tagElements[k].tabIndex = "-1";
                    i++;
                }
            }
        }
        i = 0;
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            var tagSelectInPopUp = new Array();
            tagElements = this._foregroundElement.getElementsByTagName('SELECT');
            for (var k = 0; k < tagElements.length; k++) {
                tagSelectInPopUp[i] = tagElements[k];
                i++;
            }
            i = 0;
            Array.clear(this._saveDisableSelect);
            tagElements = document.getElementsByTagName('SELECT');
            for (var k = 0; k < tagElements.length; k++) {
                if (Array.indexOf(tagSelectInPopUp, tagElements[k]) == -1) {
                    this._saveDisableSelect[i] = { tag: tagElements[k], visib: this._getCurrentStyle(tagElements[k], 'visibility') };
                    tagElements[k].style.visibility = 'hidden';
                    i++;
                }
            }
        }
        this._disableTabsCalled = true;
    }
}
function Sys$UI$_ModalUpdateProgress$_restoreTabs() {
    if (this._disableTabsCalled) {
        for (var i = 0; i < this._saveTabIndexes.length; i++) {
            this._saveTabIndexes[i].tag.tabIndex = this._saveTabIndexes[i].index;
        }
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            for (var k = 0; k < this._saveDisableSelect.length; k++) {
                this._saveDisableSelect[k].tag.style.visibility = this._saveDisableSelect[k].visib;
            }
        }
        this._disableTabsCalled = false;
    }
}
function Sys$UI$_ModalUpdateProgress$_hide() {
    this._backgroundElement.style.display = 'none';
    this._foregroundElement.style.display = 'none';
    this._restoreTabs();
    this._detachPopup();
}
function Sys$UI$_ModalUpdateProgress$_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$_ModalUpdateProgress$_startRequest() {
    if (this._pageRequestManager.get_isInAsyncPostBack()) {
        this._show();
    }
    this._timerCookie = null;
}
function Sys$UI$_ModalUpdateProgress$_handleEndRequest(sender, arg) {
    this._hide();
    if (this._timerCookie) {
        window.clearTimeout(this._timerCookie);
        this._timerCookie = null;
    }
}
function Sys$UI$_ModalUpdateProgress$_getCurrentStyle(element, attribute, defaultValue) {
    var currentValue = null;
    if (element) {
        if (element.currentStyle) {
            currentValue = element.currentStyle[attribute];
        } else if (document.defaultView && document.defaultView.getComputedStyle) {
            var style = document.defaultView.getComputedStyle(element, null);
            if (style) {
                currentValue = style[attribute];
            }
        }

        if (!currentValue && element.style.getPropertyValue) {
            currentValue = element.style.getPropertyValue(attribute);
        }
        else if (!currentValue && element.style.getAttribute) {
            currentValue = element.style.getAttribute(attribute);
        }
    }

    if ((!currentValue || currentValue == "" || typeof (currentValue) === 'undefined')) {
        if (typeof (defaultValue) != 'undefined') {
            currentValue = defaultValue;
        }
        else {
            currentValue = null;
        }
    }
    return currentValue;
}
function Sys$UI$_ModalUpdateProgress$dispose() {
    this._detachPopup();
    this._scrollHandler = null;
    this._resizeHandler = null;
    if (this._cancelHandler && $get(this._cancelControlID)) {
        $removeHandler($get(this._cancelControlID), 'click', this._cancelHandler);
        this._cancelHandler = null;
    }
    if (this._pageRequestManager !== null) {
        this._pageRequestManager.remove_beginRequest(this._beginRequestHandlerDelegate);
        this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegate);
    }
    Sys.UI._ModalUpdateProgress.callBaseMethod(this, "dispose");
}
function Sys$UI$_ModalUpdateProgress$initialize() {
    Sys.UI._ModalUpdateProgress.callBaseMethod(this, 'initialize');

    this._foregroundElement = this.get_element();
    this._backgroundElement = document.createElement('div');
    this._backgroundElement.style.display = 'none';
    this._backgroundElement.style.position = 'absolute';
    this._backgroundElement.style.zIndex = 100000;
    if (this._backgroundCssClass) {
        this._backgroundElement.className = this._backgroundCssClass;
    }
    this._foregroundElement.parentNode.appendChild(this._backgroundElement);
    this._foregroundElement.style.display = 'none';
    this._foregroundElement.style.position = 'absolute';
    this._foregroundElement.style.zIndex = this._getCurrentStyle(this._backgroundElement, 'zIndex', this._backgroundElement.style.zIndex) + 1;

    if (this._cancelControlID) {
        this._cancelHandler = Function.createDelegate(this, this._onCancel);
        $addHandler($get(this._cancelControlID), 'click', this._cancelHandler);
    }

    this._scrollHandler = Function.createDelegate(this, this._onLayout);
    this._resizeHandler = Function.createDelegate(this, this._onLayout);

    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._ModalUpdateProgress.prototype = {
    get_backgroundCssClass: Sys$UI$_ModalUpdateProgress$get_backgroundCssClass,
    set_backgroundCssClass: Sys$UI$_ModalUpdateProgress$set_backgroundCssClass,
    get_cancelControlID: Sys$UI$_ModalUpdateProgress$get_cancelControlID,
    set_cancelControlID: Sys$UI$_ModalUpdateProgress$set_cancelControlID,
    _attachPopup: Sys$UI$_ModalUpdateProgress$_attachPopup,
    _detachPopup: Sys$UI$_ModalUpdateProgress$_detachPopup,
    _onCancel: Sys$UI$_ModalUpdateProgress$_onCancel,
    _onLayout: Sys$UI$_ModalUpdateProgress$_onLayout,
    _layout: Sys$UI$_ModalUpdateProgress$_layout,
    _show: Sys$UI$_ModalUpdateProgress$_show,
    _disableTabs: Sys$UI$_ModalUpdateProgress$_disableTabs,
    _restoreTabs: Sys$UI$_ModalUpdateProgress$_restoreTabs,
    _hide: Sys$UI$_ModalUpdateProgress$_hide,
    _handleBeginRequest: Sys$UI$_ModalUpdateProgress$_handleBeginRequest,
    _startRequest: Sys$UI$_ModalUpdateProgress$_startRequest,
    _handleEndRequest: Sys$UI$_ModalUpdateProgress$_handleEndRequest,
    _getCurrentStyle: Sys$UI$_ModalUpdateProgress$_getCurrentStyle,
    dispose: Sys$UI$_ModalUpdateProgress$dispose,
    initialize: Sys$UI$_ModalUpdateProgress$initialize
}
Sys.UI._ModalUpdateProgress.registerClass('Sys.UI._ModalUpdateProgress', Sys.UI._UpdateProgress);

