﻿// Map MessageBox Object.

function MessageBox(messageBoxID, style){

    // Constants
    var defaultMessageBoxContent = "<img src='%1'</img> Loading...".replace("%1",loadingImage);
    
    // Members
    var _messageBox = null;
    var _messageBoxData = null;
    var _stayLoaded = false;
        
    _init();

    // Constructor
    function _init(){
        _messageBox = document.createElement('div');
        _messageBox.id = messageBoxID;
        
        if (style == null){
            _messageBox.className = "ve_messageBox";
        }
        else{
            _messageBox.className = style;
        }
        
        _messageBox.className += " transparent";
        
        _messageBox.style.display = "none";

        document.body.appendChild(_messageBox);
        
        _messageBoxData = document.createElement('div');
        _messageBoxData.id = messageBoxID + "_data";
        _messageBoxData.className = "ve_messageBoxData transparent";
        _messageBoxData.innerHTML = defaultMessageBoxContent;
        _messageBox.appendChild(_messageBoxData);
        
        _repositionAuto();
    }
    
    // Getter for DOM object.
    function _getElement(){
        return document.getElementById(_messageBox.id);
    }
    
    // Repositions the legend as per given offsets.
    function _reposition(top, left){
        _show();
        _messageBox.style.top = top + "px";
        _messageBox.style.left = left + "px";
        _forceHide();
    }
    
    // Repositions based on center of the screen.
    function _repositionAuto(adjustWidth, adjustHeight){
        _show();
        
        var boxWidth = _messageBox.clientWidth;
        _messageBox.style.left = (document.documentElement.clientWidth / 2 - _messageBox.clientWidth / 2) + "px";

        var boxHeight = _messageBox.clientHeight;
        _messageBox.style.top = (document.documentElement.clientHeight / 2 - _messageBox.clientHeight / 2) + "px";
        
        _forceHide();
    }
    
    // Shows the given content permanently.
    function _show(content){
        if (content == null){
            _messageBoxData.innerHTML = defaultMessageBoxContent;
        }
        else{
            _messageBoxData.innerHTML = content;
        }
        _messageBox.style.display = "block";
        
    }
    
    // Shows the given content, hiding after a given timeout value, with an option to allow the user to close.
    function _showAndStay(content, disableCloseButton, autoHideTimeout, buttonText){
        if (content == null){
            return;
        }
        if (buttonText == null){
            buttonText = "OK";
        }
        
        
        if (!isValid(disableCloseButton) || (!disableCloseButton)){
            content += " <input type='button' value='" + buttonText + "' onclick='" + _messageBox.id + ".ForceHide();'/>";
        }
        
        _show(content);

        if (autoHideTimeout != null){
            setTimeout(_messageBox.id + ".ForceHide();", autoHideTimeout);
        }
        _stayLoaded = true;
    }
    
    // Hides the message box.
    function _hide(){
        if (!_stayLoaded){
            _forceHide();
        }
    }
    
    // Forcefully hides the message box.    
    function _forceHide(){
        _messageBox.style.display = "none";
        _stayLoaded = false;
    }
    
    // Sets the message box's contents.
    function _setContent(content){
        _messageBoxData.innerHTML = content;
    }
    
    this.GetElement = _getElement;
    this.Reposition = _reposition;
    this.Show = _show;
    this.ShowAndStay = _showAndStay;
    this.Hide = _hide;
    this.ForceHide = _forceHide;
    this.SetContent = _setContent;
    this.AutoReposition = _repositionAuto;
}