﻿Type.registerNamespace("ADM.UserControls");

ADM.UserControls.ModalPopup = function() {
    this._shownHandler = null;
    this._resizeHandler = null;
    this._preResizeHandler = null;
    
    this._panneauContenuClientID = null;
    this._panneauDetailClientID = null;
    this._panneauContourDetailClientID = null;
    this._panneauContenuDetailClientID = null;
    this._panneauChargementClientID = null;
    this._panneauTitreCientID = null;
    this._panneauMessageClientID = null;
    this._panneauCollapseClientID = null;
    this._panneauCollapseBoutonClientID = null;
    this._modalPopupBehaviorID = null;
    this._collapsePanelBehaviorID = null;
    
    this._isDisable = false;
    this._disableElement = null;
    this._commonObj = new AjaxControlToolkit._CommonToolkitScripts();
}
ADM.UserControls.ModalPopup.prototype = {
    getModalPopup : function() {
        var ret = null;
        
        if (this._modalPopupBehaviorID != null) {
            ret = $find(this._modalPopupBehaviorID);
        }
        return ret;
    },  
    getCollapsePanel : function() {
        var ret = null;
        
        if (this._collapsePanelBehaviorID != null) {
            ret = $find(this._collapsePanelBehaviorID);
        }
        return ret;
    },
    setShownHandler : function(handler) {
        this._shownHandler = handler;
    },
    setResizeHandler : function(handler) {
        this._resizeHandler = handler;
    },
    setPreResizeHandler : function(handler) {
        this._preResizeHandler = handler;
    },
    setPanneauContenuClientID : function(clientID) {
        this._panneauContenuClientID = clientID;
    },
    setPanneauDetailClientID : function(clientID) {
        this._panneauDetailClientID = clientID;
    },
    setPanneauContourDetailClientID : function(clientID) {
        this._panneauContourDetailClientID = clientID;
    },   
    setPanneauContenuDetailClientID : function(clientID) {
        this._panneauContenuDetailClientID = clientID;
    },
    setPanneauChargementClientID : function(clientID) {
        this._panneauChargementClientID = clientID;
    },
    setPanneauTitreClientID : function(clientID) {
        this._panneauTitreCientID = clientID;
    },
    setPanneauMessageClientID : function(clientID) {
        this._panneauMessageClientID = clientID;
    },
    setPanneauCollapseClientID : function(clientID) {
        this._panneauCollapseClientID = clientID;
    },
    setPanneauCollapseBoutonClientID : function(clientID) {
        this._panneauCollapseBoutonClientID = clientID;
    },
    setModalPopupBehaviorID : function(behaviorID) {
        this._modalPopupBehaviorID = behaviorID;
    },
    setCollapsePanelBehaviorID : function(behaviorID) {
        this._collapsePanelBehaviorID = behaviorID;
    },
    init : function() {
        $addHandler(window, "resize", Function.createDelegate(this, this._onResize));
        $addHandler(window, "scroll", Function.createDelegate(this, this._resizeDisableElement));
        
        var modalPopup = this.getModalPopup();
        var cp = this.getCollapsePanel();
        
        if (modalPopup != null) {
            modalPopup.add_shown(Function.createDelegate(this, this._onShown));
        }
        if (cp != null) {
            cp.add_expanding(Function.createDelegate(this, this._onCollapsePanelExpanding));
            cp.add_collapsing(Function.createDelegate(this, this._onCollapsePanelCollapsing));
            cp.add_expanded(Function.createDelegate(this, this._onCollapsePanelExpanded));
            cp.add_collapsed(Function.createDelegate(this, this._onCollapsePanelCollapsed));
        }
    },
    _afficherFenetreChargement : function() {
        var pDetail = $get(this._panneauDetailClientID);
        var pContenu = $get(this._panneauContenuClientID);
        
        if (pDetail != null) {
            pDetail.style.display = "none";     
        }
        
        this._calculateChildrenSize(pContenu);
    },
    _cacherFenetreChargement : function() {
        var pDetail = $get(this._panneauDetailClientID);
        
        if (pFenetre != null && pDetail != null) {
            pDetail.style.display = "block";
             //doit recalculer les enfants du div pDetail
            this._calculateChildrenSize(pDetail);
        }
    },   
    _onShown : function(e) {
        this._onResize(null);
        
        if (this._shownHandler != null) {
            this._shownHandler();
        }
    },
    _onClose : function(e) {
    },
    _calculateChildrenSize : function(e) {
        var ElementEnfant = null;
        var i = 0;
        
        if (e != null) {
            for (i = 0; i < e.childNodes.length; i++) {
                ElementEnfant= e.childNodes[i];
          
                if (ElementEnfant.id != null) {
                    switch(ElementEnfant.id.substr(ElementEnfant.id.lastIndexOf("_") + 1)) {
                        case "pContourMenu":            
                            //doit mettre le div a 1px pour permettre à IE6 de redimensionner le contourMenu correctement
                            ElementEnfant.style.height = "1px";
                            ElementEnfant.style.width = "1px";

                            //Calcul de la hauteur
                            if(ElementEnfant.parentElement!= null)
                            {
                            if (ElementEnfant.parentElement.offsetHeight != 0) {
                                var h = (ElementEnfant.parentElement.offsetHeight - this._offsetTopFromParent(ElementEnfant) - this._offsetBottomFromParent(ElementEnfant) - this._calculateFriendHeight(ElementEnfant.parentElement,ElementEnfant.id) );
                                if (h <= 0) {
                                    h = 1;
                                }
                                ElementEnfant.style.height = h + "px";}
                            }
                            //Calcul de la largeur
                            var w = this._calculateFriendWidth(ElementEnfant, ElementEnfant.id);
                            if (w <= 0) {
                                w = 1;
                            }
                            ElementEnfant.style.width = w + "px";          
                            break;
                        case "pContainer":
                            //Calcul de la largeur 
                            if(ElementEnfant.parentElement!= null) {
                                if (ElementEnfant.parentElement.offsetWidth != 0) {
                                    var w = (ElementEnfant.parentElement.offsetWidth - this._offsetLeftFromParent(ElementEnfant) - this._offsetRightFromParent(ElementEnfant));
                                    if (w <= 0) {
                                        w = 1;
                                    }
                                    ElementEnfant.style.width = w + "px";
                                }
                            }
                            break;                              
                        case "pContenu":
                            //Calcul de la largeur 
                            if(ElementEnfant.parentElement!= null) {
                                if (ElementEnfant.parentElement.offsetWidth != 0) {
                                    var w = (ElementEnfant.parentElement.offsetWidth - this._offsetLeftFromParent(ElementEnfant) - this._offsetRightFromParent(ElementEnfant));
                                    if (w <= 0) {
                                        w = 1;
                                    }
                                    ElementEnfant.style.width = w + "px";
                                }
                            }
                            break;        
                        case "pDetail":
                            //doit mettre le div a 1px pour permettre à IE6 de redimensionner le contourMenu correctement
                            this._FixIE6Redimension(ElementEnfant,"pContourDetail");
              
                            //Calcul de la largeur 
                            if(ElementEnfant.parentElement!= null) {
                                if (ElementEnfant.parentElement.offsetWidth != 0) {
                                    var w = (ElementEnfant.parentElement.offsetWidth - this._offsetLeftFromParent(ElementEnfant) - this._offsetRightFromParent(ElementEnfant) - this._calculateFriendWidth(ElementEnfant.parentElement,ElementEnfant.id));
                                    if (w <= 0) {
                                        w = 1;
                                    }
                                    ElementEnfant.style.width = w + "px";
                                }
                            }
                            break;
                        case "pContourDetail": 
                            //Calcul de la hauteur
                            if(ElementEnfant.parentElement!= null) {
                                if (ElementEnfant.parentElement.offsetHeight != 0) {
                                    var h = (ElementEnfant.parentElement.offsetHeight - this._offsetTopFromParent(ElementEnfant) - this._offsetBottomFromParent(ElementEnfant) - this._calculateFriendHeight(ElementEnfant.parentElement,ElementEnfant.id));
                                    if (h <= 0) {
                                        h = 1;
                                    }
                                    ElementEnfant.style.height = h + "px";
                                }
                            }
                            //Calcul de la largeur  
                            if(ElementEnfant.parentElement!= null)
                            { 
                            if (ElementEnfant.parentElement.offsetWidth != 0) {
                                var w = (ElementEnfant.parentElement.offsetWidth - this._offsetLeftFromParent(ElementEnfant) - this._offsetRightFromParent(ElementEnfant) - this._calculateFriendWidth(ElementEnfant.parentElement,ElementEnfant.id));
                                if (w <= 0) {
                                    w = 1;
                                }
                                ElementEnfant.style.width = w + "px";}
                            }
                            break;
                        case "pContenuDetail":
                            //Calcul de la hauteur
                            if(ElementEnfant.parentElement!= null) {
                                if (ElementEnfant.parentElement.offsetHeight != 0) {
                                    var h = (ElementEnfant.parentElement.offsetHeight - this._offsetTopFromParent(ElementEnfant) - this._offsetBottomFromParent(ElementEnfant) - this._calculateFriendHeight(ElementEnfant.parentElement,ElementEnfant.id) );
                                    if (h <= 0) {
                                        h = 1;
                                    }
                                    ElementEnfant.style.height = h + "px";
                                }
                            }
                            //Calcul de la largeur  
                            if(ElementEnfant.parentElement!= null)
                            { 
                            if (ElementEnfant.parentElement.offsetWidth != 0) {
                                var w = (ElementEnfant.parentElement.offsetWidth - this._offsetLeftFromParent(ElementEnfant) - this._offsetRightFromParent(ElementEnfant) - this._calculateFriendWidth(ElementEnfant.parentElement,ElementEnfant.id));
                                if (w <= 0) {
                                    w = 1;
                                }
                                ElementEnfant.style.width = w + "px";}
                            }
                            break;
                            break;
                        case "pShadowLiaison": 
                            if(ElementEnfant.parentElement!= null) {
                                if (ElementEnfant.parentElement.offsetWidth != 0) {
                                    var w = (ElementEnfant.parentElement.offsetWidth - this._offsetLeftFromParent(ElementEnfant) - this._offsetRightFromParent(ElementEnfant));
                                    if (w <= 0) {
                                        w = 1;
                                    }
                                    ElementEnfant.style.width = w + "px";
                                }
                            }
                            ElementEnfant.style.height = "100%";
                            break;
                        case "pShadowLeft": 
                            if(ElementEnfant.parentElement!= null) {
                                if (ElementEnfant.parentElement.offsetWidth != 0) {
                                    var w = (ElementEnfant.parentElement.offsetWidth - this._offsetLeftFromParent(ElementEnfant) - this._offsetRightFromParent(ElementEnfant));
                                    if (w <= 0) {
                                        w = 1;
                                    }
                                    ElementEnfant.style.width = w + "px";
                                }
                            }
                            ElementEnfant.style.height = "100%";
                            break;        
                    } 
                    // récursivite pour passer a traver tous les enfants des enfants
                    this._calculateChildrenSize(ElementEnfant);
                }
            }
        }
    },
    _offsetTopFromParent : function(e) { 
        var offsetTop = new Number(0);
        var borderTopParent = new Number(e.parentElement.currentStyle.borderTopWidth.replace("px",""));
        var paddingTopParent = new Number(e.parentElement.currentStyle.paddingTop.replace("px",""));
        var marginTop = new Number(e.currentStyle.marginTop.replace("px",""));
        var borderTop = new Number(e.currentStyle.borderTopWidth.replace("px",""));
        var paddingTop = new Number(e.currentStyle.paddingTop.replace("px",""));
      
        if (!isNaN(borderTopParent)) {
            offsetTop += borderTopParent;
        }
        if (!isNaN(paddingTopParent)) {
            offsetTop += paddingTopParent;
        }
        if (!isNaN(marginTop)) {
            offsetTop += marginTop;
        }
        if (!isNaN(borderTop)) {
            offsetTop += borderTop;
        }
        if (!isNaN(paddingTop)) {
            offsetTop += paddingTop;
        }
        
        return offsetTop;
    },
    _offsetBottomFromParent : function(e) { 
        var offsetBottom = new Number(0);
        var borderBottomParent = new Number(e.parentElement.currentStyle.borderBottomWidth.replace("px",""));
        var paddingBottomParent = new Number(e.parentElement.currentStyle.paddingBottom.replace("px",""));
        var marginBottom = new Number(e.currentStyle.marginBottom.replace("px",""));
        var borderBottom = new Number(e.currentStyle.borderBottomWidth.replace("px",""));
        var paddingBottom = new Number(e.currentStyle.paddingBottom.replace("px",""));
      
        if (!isNaN(borderBottomParent)) {
            offsetBottom += borderBottomParent;
        }
        if (!isNaN(paddingBottomParent)) {
            offsetBottom += paddingBottomParent;
        }
        if (!isNaN(marginBottom)) {
            offsetBottom += marginBottom;
        }
        if (!isNaN(borderBottom)) {
            offsetBottom += borderBottom;
        }
        if (!isNaN(paddingBottom)) {
            offsetBottom += paddingBottom;
        }
        
        return offsetBottom;
    }, 
    _offsetLeftFromParent : function(e) { 
        var offsetLeft = new Number(0);
        var borderLeftParent = new Number(e.parentElement.currentStyle.borderLeftWidth.replace("px",""));
        var paddingLeftParent = new Number(e.parentElement.currentStyle.paddingLeft.replace("px",""));
        var marginLeft = new Number(e.currentStyle.marginLeft.replace("px",""));
        var borderLeft = new Number(e.currentStyle.borderLeftWidth.replace("px",""));
        var paddingLeft = new Number(e.currentStyle.paddingLeft.replace("px",""));

        if (!isNaN(borderLeftParent)) {
            offsetLeft += borderLeftParent;
        }
        if (!isNaN(paddingLeftParent)) {
            offsetLeft += paddingLeftParent;
        }
        if (!isNaN(marginLeft)) {
            offsetLeft += marginLeft;
        }
        if (!isNaN(borderLeft)) {
            offsetLeft += borderLeft;
        }
        if (!isNaN(paddingLeft)) {
            offsetLeft += paddingLeft;
        }

        return offsetLeft;
    }, 
    _offsetRightFromParent : function(e) { 
        var offsetRight = new Number(0);
        var borderRightParent = new Number(e.parentElement.currentStyle.borderRightWidth.replace("px",""));
        var paddingRightParent = new Number(e.parentElement.currentStyle.paddingRight.replace("px",""));
        var marginRight = new Number(e.currentStyle.marginRight.replace("px",""));
        var borderRight = new Number(e.currentStyle.borderRightWidth.replace("px",""));
        var paddingRight = new Number(e.currentStyle.paddingRight.replace("px",""));

        if (!isNaN(borderRightParent)) {
            offsetRight += borderRightParent;
        }
        if (!isNaN(paddingRightParent)) {
            offsetRight += paddingRightParent;
        }
        if (!isNaN(marginRight)) {
            offsetRight += marginRight;
        }
        if (!isNaN(borderRight)) {
            offsetRight += borderRight;
        }
        if (!isNaN(paddingRight)) {
            offsetRight += paddingRight;
        }

        return offsetRight;
    },     
    
    
    _calculateFriendWidth : function(e,n) {
        var friendElement = null;
        var friendWidth = new Number(0);
        
        if (e != null) {
            for (var i = 0; i < e.childNodes.length; i++) {
                friendElement = e.childNodes[i];
                
                if (friendElement.id != null && friendElement.id != n) {
                    var marginLeft= new Number(friendElement.currentStyle.marginLeft.replace("px",""));
                    var marginRight= new Number(friendElement.currentStyle.marginRight.replace("px",""));
                    
                    if (!isNaN(marginLeft)) {
                        friendWidth += marginLeft;
                    }
                    if (!isNaN(marginRight)) {
                        friendWidth += marginRight;
                    }
                    
                    friendWidth += friendElement.offsetWidth;
                }
            }   
        }
        return friendWidth;
    },
    _calculateFriendHeight : function(e,n) {
        var i = 0;
        var friendElement = null;
        var friendHeight = new Number(0);
        
        if (e != null) {
            for (i = 0; i < e.childNodes.length; i++) {
                friendElement = e.childNodes[i];
                
                if (friendElement.id != null && friendElement.id != n) {
                    var marginTop = new Number(friendElement.currentStyle.marginTop.replace("px",""));
                    var marginBottom = new Number(friendElement.currentStyle.marginBottom.replace("px",""));
                    
                    if (!isNaN(marginTop)) {
                        friendHeight += marginTop;
                    }
                    if (!isNaN(marginBottom)) {
                        friendHeight += marginBottom;
                    }
                    
                    friendHeight += friendElement.offsetHeight;
                }
            }   
        }
        return friendHeight;
    },
    resize : function() {
        this._onResize(null);
    },
    _onResize : function(e) {
        var popup = this.getModalPopup();
        var clientBounds = this._commonObj.getClientBounds();
        var clientWidth = clientBounds.width;
        var clientHeight = clientBounds.height;
        
        if ((clientHeight - 100) > 0 && (clientWidth - 100) > 0) {
            // only do this fix for IE6, if we use it with firefox, the rendering is very bad.
            if (popup._isIE6) {
                this._resizeChilds_FIXIE6(popup._foregroundElement);
            }
        
            popup._foregroundElement.style.height = (clientHeight - 100) + "px";
            popup._foregroundElement.style.width = (clientWidth - 100) + "px";
            
            if (this._preResizeHandler != "undefined" && this._preResizeHandler != null) {
                this._preResizeHandler();
            }
            this._calculateChildrenSize(popup._foregroundElement);
            
            if (this._resizeHandler != "undefined" && this._resizeHandler != null) {
                var panneauContourDetail = $get(this._panneauContourDetailClientID);
             
                if (panneauContourDetail != "undefined" && panneauContourDetail != null) {
                    this._resizeHandler(panneauContourDetail.style.width, panneauContourDetail.style.height);
                }
            }
            popup._layout();
            
            if (this._isDisable) {
                this._resizeDisableElement();
            }
        }
    },
    _onCollapsePanelExpanding : function() {
        var pDetail = $get(this._panneauDetailClientID);
        if (pDetail != null) {
            pDetail.style.display = "none";     
        }
    },
    _onCollapsePanelCollapsing : function() {            
        var pDetail = $get(this._panneauDetailClientID);
        if (pDetail != null) {
            pDetail.style.display = "none";     
        }
    },
    _onCollapsePanelExpanded : function() {
        var pDetail = $get(this._panneauDetailClientID);
        if (pDetail != null) {
            pDetail.style.display = "block"; 
            
            this._calculateChildrenSize(pDetail);    
        }
        this.resize();
    },
    _onCollapsePanelCollapsed : function() {
        var pDetail = $get(this._panneauDetailClientID);
        if (pDetail != null) { 
            pDetail.style.display = "block"; 
            
            this._calculateChildrenSize(pDetail);    
        }
        this.resize();
    },
    displayMessagePanel : function() {
        var pMessage = $get(this._panneauMessageClientID);
        pMessage.style.display = "block";
    },
    hideMessagePanel : function() {
        var pMessage = $get(this._panneauMessageClientID);
        pMessage.style.display = "none";
    },
    disable : function() {
        this._isDisable = true;
        
        if (this._disableElement == null) {
            this._disableElement = document.createElement("div");
            this._disableElement.className = "disable";

            var popupControl = $get(this.getModalPopup().get_PopupControlID());
            popupControl.parentNode.appendChild(this._disableElement);
        }
        
        this._resizeDisableElement(null);
        this._disableElement.style.display = "block";
    },
    enable : function() {
        this._isDisable = false;
        
        if (this._disableElement != null) {
            this._disableElement.style.display = "none";
        }
    },
    _resizeDisableElement : function(e) {
        if (this._disableElement != null) {
            var clientBounds = this._commonObj.getClientBounds();
        
            this._disableElement.style.width = Math.max(Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), clientBounds.width)+'px';
            this._disableElement.style.height = Math.max(Math.max(document.documentElement.scrollHeight, document.body.scrollHeight), clientBounds.height)+'px';

            Sys.UI.DomElement.setLocation(this._disableElement, 0, 0);
        }
    },
    _resizeChilds_FIXIE6 : function(parent) {
        var ElementEnfant = null;
        var i = 0;
        
        if (parent != null) {
            for (i = 0; i < parent.childNodes.length; i++) {
                ElementEnfant = parent.childNodes[i];
          
                if (ElementEnfant.id != null) {
                    switch(ElementEnfant.id.substr(ElementEnfant.id.lastIndexOf("_") + 1)) {
                        case "pShadowLiaison": 
                        case "pShadowLeft": 
                        case "pContainer":
                        case "pContenu":
                        case "pDetail":
                        case "pChargement":
                        case "pContourDetail": 
                        case "pContenuDetail":
                            ElementEnfant.style.width = "1px";
                            this._resizeChilds_FIXIE6(ElementEnfant);  
                            break;
                    }
                }
            }
        }
    },
    _FixIE6Redimension : function(e,n) {
        var j = 0;
        var ElementEnfant = null;
        
        for (j = 0; j < e.childNodes.length; j++) {
            ElementEnfant= e.childNodes[j];
            
            if (ElementEnfant.id != null) {   
                switch(ElementEnfant.id.substr(ElementEnfant.id.lastIndexOf("_") + 1)) {
                    case n:
                        ElementEnfant.style.width = "1px";
                        ElementEnfant.style.height = "1px";
                }
            }
        }
    }
}