﻿var ModalPopupsDefaults = {    borderColor: "#999999",
    titleBackColor: "#C1D2E7",    titleFontColor: "#0000FF",    popupBackColor: "#C7D6E9",
    popupFontColor: "#0000FF",    footerBackColor: "#C1D2E7",    footerFontColor: "#15428B",    okButtonText: "OK",    yesButtonText: "Yes",
    noButtonText: "No",
    cancelButtonText: "Cancel",
    fontFamily: "Verdana,Arial",
    fontSize: "9pt"
}

var ModalPopups = {
    SetDefaults: function(parameters) {
        parameters = parameters || {};
        ModalPopupsDefaults.borderColor = parameters.borderColor != null ? parameters.borderColor : ModalPopupsDefaults.borderColor;
        ModalPopupsDefaults.okButtonText = parameters.okButtonText != null ? parameters.okButtonText : ModalPopupsDefaults.okButtonText;
        ModalPopupsDefaults.yesButtonText = parameters.yesButtonText != null ? parameters.yesButtonText : ModalPopupsDefaults.yesButtonText;
        ModalPopupsDefaults.noButtonText = parameters.noButtonText != null ? parameters.noButtonText : ModalPopupsDefaults.noButtonText;
        ModalPopupsDefaults.cancelButtonText = parameters.cancelButtonText != null ? parameters.cancelButtonText : ModalPopupsDefaults.cancelButtonText;
        ModalPopupsDefaults.titleBackColor = parameters.titleBackColor != null ? parameters.titleBackColor : ModalPopupsDefaults.titleBackColor;
        ModalPopupsDefaults.titleFontColor = parameters.titleFontColor != null ? parameters.titleFontColor : ModalPopupsDefaults.titleFontColor;
        ModalPopupsDefaults.popupBackColor = parameters.popupBackColor != null ? parameters.popupBackColor : ModalPopupsDefaults.popupBackColor;
        ModalPopupsDefaults.popupFontColor = parameters.popupFontColor != null ? parameters.popupFontColor : ModalPopupsDefaults.popupFontColor;
        ModalPopupsDefaults.footerBackColor = parameters.footerBackColor != null ? parameters.footerBackColor : ModalPopupsDefaults.footerBackColor;
        ModalPopupsDefaults.footerFontColor = parameters.footerFontColor != null ? parameters.footerFontColor : ModalPopupsDefaults.footerFontColor;
        ModalPopupsDefaults.fontFamily = parameters.fontFamily != null ? parameters.fontFamily : ModalPopupsDefaults.fontFamily;
        ModalPopupsDefaults.fontSize = parameters.fontSize != null ? parameters.fontSize : ModalPopupsDefaults.fontSize;
    },    Alert: function(id, title, message, parameters) {        //Get parameters        parameters = parameters || {};        if(!title) title = "Alert";        //'Alert' specific parameters        parameters.buttons = "ok";        parameters.okButtonText = parameters.okButtonText != null ? parameters.okButtonText : ModalPopupsDefaults.okButtonText;        //Create layers        var myLayers = ModalPopups._createAllLayers(id, title, message, parameters);        var oPopupBody = myLayers[4];        //'Alert' specific setup of Body        oPopupBody.innerHTML = message;        //Style all layers                ModalPopups._styleAllLayers(id, parameters, myLayers);    },            GetCustomControl: function(id) {        return ModalPopupsSupport.findControl(id);    },

    Custom: function(id, contents, parameters) {        //Get parameters
        parameters = parameters || {};

        //Create layers        var myLayers = ModalPopups._createAllLayers(id, contents, parameters);        var oPopupBody = myLayers[0];        //'Custom' specific setup of Body        oPopupBody.innerHTML = contents;

        //Style all layers        
        ModalPopups._styleAllLayers(id, parameters, myLayers);    },

    //Cancel/Close modal popup    
    Close: function(id) {
        window.onresize = null;
        window.onscroll = null;        try {        	document.body.removeChild(ModalPopupsSupport.findControl(id+"_popupBody"));        }        catch(e) {        }    },
    //Cancel/Close modal popup    
    Cancel: function(id) {
        ModalPopups.Close(id);
    },
     //Support variable to put each layer on top, increases everytime a modal popup is created
    _zIndex: 10000,
     //Support function to create all layers
    //_createAllLayers: function(id, title, message, parameters) {    _createAllLayers: function(id, message, parameters) {        //Create all 6 layers for; BackGround, Popup, Shadow, PopupTitle, PopupBody, PopupFooter        var oPopupBody = ModalPopupsSupport.makeLayer(id+'_popupBody', true, null);        
        parameters.fontFamily = parameters.fontFamily != null ? parameters.fontFamily : ModalPopupsDefaults.fontFamily;
        //Create popup 'body' layer, is done in; Alert, Confirm, YesNoCancel, Prompt and Custom functions.        var allLayers = new Array(oPopupBody);
        if(parameters.autoClose != null )
            setTimeout('ModalPopups.Close(\"'+id+'\");', parameters.autoClose);        return allLayers;
    },
         //Support function to style and position all layers    _styleAllLayers: function(id, parameters, allLayers) {        var myLayers = allLayers;        var oPopupBody = myLayers[0];        ModalPopups._zIndex += 3;        var zIndex = ModalPopups._zIndex;
        //Get Css parameters for borderColor. 
        parameters.borderColor = parameters.borderColor != null ? parameters.borderColor : ModalPopupsDefaults.borderColor;  // #859DBE

        if(ModalPopupsSupport.isOlderIE()) {
	        var viewport = ModalPopupsSupport.getViewportDimensions();
        }                //Get Css parameters for oBackGround layer.         parameters.fontFamily = parameters.fontFamily != null ? parameters.fontFamily : ModalPopupsDefaults.fontFamily;
        parameters.fontSize = parameters.fontSize != null ? parameters.fontSize : ModalPopupsDefaults.fontSize;

        var cssPopupBody = "position: absolute; zindex: 60; font-family:" + parameters.fontFamily + "; font-size:" + parameters.fontSize + "; padding: 0px; text-align:left;";
        if(ModalPopupsSupport.isIE) {
            oPopupBody.style.cssText = cssPopupBody;         }
        else { 
            oPopupBody.setAttribute("style", cssPopupBody);
        } 
    
        //Get css color related parameters for; oPopup, oPopupTitle, oPopupBody, oPopupFooter.
        parameters.popupBackColor = parameters.popupBackColor != null ? parameters.popupBackColor : ModalPopupsDefaults.popupBackColor;
        parameters.popupFontColor = parameters.popupFontColor != null ? parameters.popupFontColor : ModalPopupsDefaults.popupFontColor;
        cssPopupBody += " background-color:" + parameters.popupBackColor + ";";
        cssPopupBody += " color:" + parameters.popupFontColor + ";";

        //Calculate maxWidth of the 3 layers in oPopup. (oPopupTitle,oPopupBody,oPopupFooter)
        var calcMaxWidth = 0;
        if(ModalPopupsSupport.getLayerWidth(oPopupBody.id) > calcMaxWidth)
            calcMaxWidth = ModalPopupsSupport.getLayerWidth(oPopupBody.id);  
        //Calculate total height of the 3 layers in oPopup. (oPopupTitle+oPopupBody+oPopupFooter)
        var calcTotalHeight = ModalPopupsSupport.getLayerHeight(oPopupBody.id);    
        parameters.width = parameters.width != null ? parameters.width : (calcMaxWidth + 4); // Add 4px for; padding: 1px and border: 1px;
        parameters.height = parameters.height != null ? parameters.height : calcTotalHeight; // Set height as height of; oPopupTitle + oPopupBody + oPopupFooter
        
        var newBodyHeight = ModalPopupsSupport.getLayerHeight(oPopupBody.id)
        if(parameters.height > calcTotalHeight) {
        	newBodyHeight = parameters.height;
            cssPopupBody += " height:" + newBodyHeight + "px;";            calcTotalHeight = newBodyHeight;  
        }
        cssPopupBody += " width:" + (parameters.width - 10) + "px;"; // Sub 10px for-left+right; padding: 5px;
         //Get browser width and height
        var frameWidth = ModalPopupsSupport.getFrameWidth();
        var frameHeight = ModalPopupsSupport.getFrameHeight();
        if(parameters.height < calcTotalHeight)
            parameters.height = calcTotalHeight;
        
        //Get parameters for oPopup layer.
        parameters.top = parameters.top != null ? parameters.top : ((frameHeight/2) - (parameters.height/2));
        parameters.left = parameters.left != null ? parameters.left : ((frameWidth/2) - (parameters.width/2));

        cssPopupBody += " left:1px;";
        
        //First style the contents of the oPopup layer. (oPopupTitle, oPopupBody, oPopupFooter)        //When this is done we can calculate the height and width of the oPopup contents.        if(ModalPopupsSupport.isIE) {            oPopupBody.style.cssText = cssPopupBody;         }        else {             oPopupBody.setAttribute("style", cssPopupBody);
        }                   if(!ModalPopupsSupport.isOlderIE()) {
		}		else {
			var viewport = ModalPopupsSupport.getViewportDimensions();
		}
        ModalPopupsSupport.centerElement(document.getElementById(id+'_popupBody'), 0, false);

        window.onresize = function() {
            ModalPopupsSupport.centerElement(document.getElementById(id+'_popupBody'), 0, false);
        }    
        window.onscroll = function() {            ModalPopupsSupport.centerElement(document.getElementById(id+'_popupBody'), 0, false);        }
     }}
     var ModalPopupsSupport = {
    isIE: function() {
        return (window.ActiveXObject) ? true : false;
    },
    isOlderIE: function() {		var ver = -1; // Return value assumes failure.
		if (navigator.appName == 'Microsoft Internet Explorer') {
			var ua = navigator.userAgent;
			var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
			if (re.exec(ua) != null) {
				ver = parseFloat( RegExp.$1 );
		    }
		}
		if ( ver > -1 && ver < 7.0 ) {
			return true;
		} else {
			return false;
		}
    },    makeLayer : function(id,layerVisible,layerParent) {        var container = document.createElement("div");        container.id = id;        if(layerParent)            layerParent.appendChild(container);        else            document.body.appendChild(container);        return container;    },
    deleteLayer: function(id) {        var del = findLayer(id);        if(del)             document.body.removeChild(del);    },
    findLayer: function(id) {        return document.all ? document.all[id] : document.getElementById(id);    },
    findControl: function(id, parent) {        if(parent == null)        {              return document.all ? document.all[id] : document.getElementById(id);        }        else        {            return document.all ? document.all[id] : document.getElementById(id);        }    },
    getLayerHeight: function(id) {        if (document.all) {            gh = document.getElementById(id).offsetHeight;          }        else {            gh = document.getElementById(id).offsetHeight;  //-5;        }        return gh;    },    
    getLayerWidth: function(id) {        gw = document.getElementById(id).offsetWidth;        return gw;    },
    getViewportDimensions: function() {        var intH = 0, intW = 0;        if(self.innerHeight) {           intH = window.innerHeight;           intW = window.innerWidth;        }         else {            if(document.documentElement && document.documentElement.clientHeight) {                intH = document.documentElement.clientHeight;                intW = document.documentElement.clientWidth;            }            else {                if(document.body) {                    intH = document.body.clientHeight;                    intW = document.body.clientWidth;                }            }        }
        return {            height: parseInt(intH, 10),            width: parseInt(intW, 10)        };    },
    getScrollXY: function() {        var scrOfX = 0, scrOfY = 0;        if( typeof( window.pageYOffset ) == 'number' ) {            //Netscape compliant            scrOfY = window.pageYOffset;            scrOfX = window.pageXOffset;        } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {            //DOM compliant            scrOfY = document.body.scrollTop;            scrOfX = document.body.scrollLeft;        } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {            //IE6 standards compliant mode            scrOfY = document.documentElement.scrollTop;            scrOfX = document.documentElement.scrollLeft;        }
        return [ scrOfX, scrOfY ];        },

    centerElement: function(elem,add,noleft) {        var viewport = ModalPopupsSupport.getViewportDimensions();        var left = (viewport.width == 0) ? 50 : parseInt((viewport.width - elem.offsetWidth) / 2, 10);        var top = (viewport.height == 0) ? 50 : parseInt((viewport.height - elem.offsetHeight) / 2, 10);        var scroll = ModalPopupsSupport.getScrollXY();        if(!noleft) {            elem.style.left = (left + add) + 'px';        }        elem.style.top = (top + add + scroll[1]) + 'px';        viewport, left, top, elem = null;        },
    getFrameWidth: function() {        var frameWidth = document.documentElement.clientWidth;        if (self.innerWidth) // Als de browser deze manier van aanroepen hanteerd        {            frameWidth = self.innerWidth; // Haal de frame-width op        }        else if (document.documentElement && document.documentElement.clientWidth)  // Als de browser deze manier van aanroepen hanteerd        {            frameWidth = document.documentElement.clientWidth; // Haal de frame-width op        }        else if (document.body)  // Als de browser deze manier van aanroepen hanteerd        {            frameWidth = document.body.clientWidth; // Haal de frame-width op        }        else return;        return frameWidth;    },
    getFrameHeight: function() {        var frameHeight = document.documentElement.clientHeight;        if (self.innerWidth) // Als de browser deze manier van aanroepen hanteerd        {            frameHeight = self.innerHeight; // Haal de frame-height op        }        else if (document.documentElement && document.documentElement.clientWidth)  // Als de browser deze manier van aanroepen hanteerd        {            frameHeight = document.documentElement.clientHeight; // Haal de frame-height op        }        else if (document.body)  // Als de browser deze manier van aanroepen hanteerd        {            frameHeight = document.body.clientHeight; // Haal de frame-height op        }        else return;        return frameHeight;    }
};




