﻿Sys.UI._ModalUpdateProgress = function Sys$UI$_ModalUpdateProgress(element) {
    Sys.UI._ModalUpdateProgress.initializeBase(this,[element]);
    this._backgroundCssClass = null;
    this._maxWidth = 800;
    this._maxHeight = 600;
    this._left = null;
    this._top = null;
    this._backgroundElement = null;
    this._foregroundElement = 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_maxHeight() {
        /// <value type="String"></value>
        if (arguments.length !== 0) throw Error.parameterCount();
        return this._maxHeight;
    }
    function Sys$UI$_ModalUpdateProgress$set_maxHeight(value) {
        this._maxHeight = value;
    }    
    function Sys$UI$_ModalUpdateProgress$get_maxWidth() {
        /// <value type="String"></value>
        if (arguments.length !== 0) throw Error.parameterCount();
        return this._maxWidth;
    }
    function Sys$UI$_ModalUpdateProgress$set_maxWidth(value) {
        this._maxWidth = value;
    }
    function Sys$UI$_ModalUpdateProgress$get_left() {
        /// <value type="String"></value>
        if (arguments.length !== 0) throw Error.parameterCount();
        return this._left;
    }
    function Sys$UI$_ModalUpdateProgress$set_left(value) {
        this._left = value;
    }    
    function Sys$UI$_ModalUpdateProgress$get_top() {
        /// <value type="String"></value>
        if (arguments.length !== 0) throw Error.parameterCount();
        return this._top;
    }
    function Sys$UI$_ModalUpdateProgress$set_top(value) {
        this._top = 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);
			}
			
			this._windowHandlersAttached = 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 bounds = this._getClientBounds();

//        try {
//            var backgroundElementBounds = Sys.UI.DomElement.getBounds(this._backgroundElement);

//            if (backgroundElementBounds.x != 0) {
//                this._backgroundElement.style.left = -1 * backgroundElementBounds.x + "px";
//            }

//            if (backgroundElementBounds.y != 0) {
//                this._backgroundElement.style.top = -1 * backgroundElementBounds.y + "px";
//            }
//        }
//        catch (err) {
//            var kalle = 10;
//             }

        this._backgroundElement.style.width = (bounds.width - 20) + 'px';
        this._backgroundElement.style.height = bounds.height + 'px';
        this._foregroundElement.style.left = scrollLeft+((Math.min(this._maxWidth, bounds.width)-this._foregroundElement.offsetWidth)/2)+'px';
        this._foregroundElement.style.top = scrollTop+((Math.min(this._maxHeight, bounds.height)-this._foregroundElement.offsetHeight)/4)+'px';
    }
    
    function Sys$UI$_ModalUpdateProgress$_getClientBounds()
    {
        var clientWidth;
        var clientHeight;
        
        switch(Sys.Browser.agent) {
            case Sys.Browser.InternetExplorer:
                clientWidth = document.documentElement.scrollWidth;
                clientHeight = document.documentElement.scrollHeight;
                break;
            case Sys.Browser.Safari:
                clientWidth = window.innerWidth;
                clientHeight = window.innerHeight;
                break;
            case Sys.Browser.Opera:
                clientWidth = Math.min(window.innerWidth, document.body.clientWidth);
                clientHeight = Math.min(window.innerHeight, document.body.clientHeight);
                break;
            default:  // Sys.Browser.Firefox, etc.
                clientWidth = Math.max(window.innerWidth, document.documentElement.scrollWidth);
                clientHeight = Math.max(window.innerHeight, document.documentElement.scrollHeight);
                break;
        }
        
        return new Sys.UI.Bounds(0, 0, clientWidth, clientHeight);
    }
    
    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();
    }
    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) {
                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';
                        tagElements[k].disabled = "disabled";
                        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) {
                for (var k = 0 ; k < this._saveDisableSelect.length; k++) {
                    this._saveDisableSelect[k].tag.style.visibility = this._saveDisableSelect[k].visib;
                    this._saveDisableSelect[k].tag.disabled = "";
                }
            }
	        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._backgroundElement !== null) {
            document.body.removeChild(this._backgroundElement);
        }
        
        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.top = '0px';
        this._backgroundElement.style.left = '0px';
        this._backgroundElement.style.backgroundColor = '#ffffff';
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer) {
            this._backgroundElement.style.filter = "alpha(opacity=0)";
        }
        else {
            this._backgroundElement.style.opacity = 0.0;
        }
        this._backgroundElement.style.zIndex = 20000;
        if (this._backgroundCssClass) {
            this._backgroundElement.className = this._backgroundCssClass;
        }
        document.body.appendChild(this._backgroundElement);
        this._foregroundElement.style.display = 'none';
        this._foregroundElement.style.position = 'absolute';
        this._foregroundElement.style.zIndex = 20001;

        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_maxHeight: Sys$UI$_ModalUpdateProgress$get_maxHeight,
    set_maxHeight: Sys$UI$_ModalUpdateProgress$set_maxHeight,
    get_maxWidth: Sys$UI$_ModalUpdateProgress$get_maxWidth,
    set_maxWidth: Sys$UI$_ModalUpdateProgress$set_maxWidth,
    get_left: Sys$UI$_ModalUpdateProgress$get_left,
    set_left: Sys$UI$_ModalUpdateProgress$set_left,
    get_top: Sys$UI$_ModalUpdateProgress$get_top,
    set_top: Sys$UI$_ModalUpdateProgress$set_top,
    _attachPopup: Sys$UI$_ModalUpdateProgress$_attachPopup,
    _detachPopup: Sys$UI$_ModalUpdateProgress$_detachPopup,
    _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,
    _getClientBounds: Sys$UI$_ModalUpdateProgress$_getClientBounds
}
Sys.UI._ModalUpdateProgress.registerClass('Sys.UI._ModalUpdateProgress', Sys.UI._UpdateProgress);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();